Ժող մի հատ շատ հեշտ խնդիր կա, միջանկյալիս լուծել էի կոմպով չոտքի աշխատում էր բայց դասախոսս ասում ա սխալ ես գրել:
Պետք է մուտք անենք զանգվածի էլեմենտները և մի թիվ, ծրագիրը դուրս է բերում թե այդ թիվը քանի անգամ է հանդիպում զանգվածում
#include <iostream.h>
main()
{
int a[5],i,b,k=0;
cout<<"b=";
cin>>b;
for (i=0; i<5; i++)
{cin>>a[i];
if(a[i]==b) k=k++;
}
cout<<k ;
return 0;}
կարմիրով նշվածը սխալ է համարում, բայց ծրագիրը անխափան աշխատում է: Միթե նման կերպ գրելը սխալ է:
Վերջին խմբագրող՝ Պոզիտրոն: 30.03.2011, 14:54:
Բանն այն է, որ երբ միջատը քայլում է գնդի վրայով չի նկատում, որ հետագիծը կորանում է... ինձ բախտ վիճակվեց նկատել այդ:
Չգիտեմ C++-ով ոնց կլինի, բայց ալգորիթմը այսպես է (եթե ուզում ես, կարող եմ պասկալով գրել), պետք է մուտք անես մատրիցը, հետո թիվը, հետո մտցնես մի հաշվիչ (k=0), բացես ցիկլ (i:=1 to n, j:=1 to n, որտեղ n-ը տողերի կամ սյուների քանակն է) և ամեն անգամ ստուգես, արդյոք քո թիվը հավասար է X[i,j] տարրին, եթե այո, ապա k-ն ավելացնես մեկով, հակառակ դեպքում անցնես հաջորդին: Վերջում տպես k-n:
Գրելաձևն ա սխալ, կամ k=k+1, կամ k++:
k=k++ -ը ըստ էության պիտի կատարվեր հետևյալ կերպ`
սկզբում կատարվում ա k++ -ը:
1. հիշել k-ի արժեքը (tmp=k)
2. k-ի արժեքը մեկով ավելացնել (k=k+1)
հետո վերագրումը:
3. k-ին վերագրել հիշված արժեքը (k=tmp)
Արդյունքում k-ի արժեքը պիտի մնար նույնը: Բայց քո մոտ ծրագիրը աշխատելա, քանի որ կոմպիլյատորը էդ քայլերը մի քիչ ուրիշ հերթականությամբ ա կատարում, այ սենց (Visual Studio 2008 SP1, Debug)
mov eax,dword ptr [k] // 1. հիշել k-ի արժեքը
mov dword ptr [k],eax // 3. k-ին վերագրել հիշված արժեքը
mov ecx,dword ptr [k] // 2. k-ի արժեքը մեկով ավելացնել
add ecx,1
mov dword ptr [k],ecx
Այսինքն վերջում k-ի արժեքը մեկով ավելանում ա ու ճիշտ ա աշխատում:
body.location = "bed";
body.position = "horizontal";
body.overlay = "blanket";
head.eyes.state = "closed";
head.brain.do_sleep();
Yellow Raven (01.04.2011), Պոզիտրոն (01.04.2011)
Էս էլ քո խնդրի լուծումը
var p,s,i,m,j,k:integer; b:string; c1:string[2];
x,d:array[1..250] of integer;
c:array[1..4] of integer;
n,l:longint;
begin
readln(n);
c[1]:=2;
b:='2';
for l:=1 to n-1 do
begin
j:=length(b);
k:=length(b)+4;
for i:=1 to length(b) do
begin
val(b[i],d[j],m); j:=j-1;
end;
for i:=1 to k do
x[i]:=0;
for i:=1 to length(b) do
for j:=1 to 4 do
x[i+j-1]:=c[j]*d[i]+x[i+j-1];
for i:=1 to k do
begin
x[i+1]:=x[i+1]+x[i] div 10;
x[i]:=x[i] mod 10;
end;
while x[k]=0 do k:=k-1;
b:='';
for i:=k downto 1 do
begin
str(x[i],c1);
b:=b+c1;
end;
end;
writeln(b);
end.
Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)
Էջանիշներ