В общем вот решил я такую задачку, которая: просит нас ввести ключ, потом ищет этот ключ в массиве(которой задавался рандомом), далее просит выбрать сортировку этого массива. 1 Сортировка заключается в том, чтобы то введенное число(то бишь ключ) поменять с первым местами,а вторая поменять ключ с предыдущим, и у меня не пашут обе,народ гляньте в процедуру чего там не так, а то я запарился...
program laba1; const N=20; var M:array[1..N+1] of integer; y1,y2,y3,x,x1,x2,z,i,kluch,rez:integer; ch:char;
function search(kluch:integer):integer; begin M[N+1]:=kluch; i:=1; while M[i]<>kluch do i:=i+1; if i=N+1 then search:=0 else search:=i end;
procedure Vivod; begin for i:=1 to N do write(M[i],' '); writeln(' '); end;
procedure Algoritm(al:byte); var temp,item:integer; begin case al of 1: begin Temp:=M[item]; for i:=Item downto 2 do M[I]:=M[I-1]; M[1]:=Temp; end; 2: begin if Item<>1 then begin Temp:=M[Item]; M[Item]:=M[item-1]; M[Item-1]:=Temp; end; end; end; end;
begin Randomize; for i:=1 to N do M[i]:=random(100); writeln('Massiv:'); Vivod; rez:=0; while rez=0 do begin writeln('Vvedite kluch poiska'); readln(kluch); z:=search(kluch); while z=0 do begin writeln('Kluch v massive ne nayden, poprubuyte vvesti ewe raz'); writeln('Vvedite kluch poiska'); readln(kluch); z:=search(kluch); end; begin ch:=' '; writeln('Esli vi xotite vipolnit sortirovku metodom puzirka, to nazmite 1,'+ ' a esli metodom priamogo dostupa-2'); while (ch<>'1') and (ch<>'2') do Readln(ch); case ch of '1':algoritm(1); '2':algoritm(2); end; end; Writeln('Rezultat:'); Vivod; ch:=' '; Writeln('Xotite ewe? (y/n)'); while (ch<>'y') and (ch<>'n') do readln(ch); case ch of 'n':exit; 'y':rez:=0; end; end; end.
volvo
1.04.2006 15:19
Цитата
гляньте в процедуру чего там не так
Чего не так? Вот это, например:
procedure Algoritm(al:byte); var temp, item:integer; { <--- item - ЛОКАЛЬНАЯ переменная, так? } begin case al of 1: begin Temp:=M[item]; { <--- Стоп !!! Чему у тебя здесь равен item ? } for i:=Item downto 2 do M[I]:=M[I-1]; M[1]:=Temp; end; 2: begin if Item<>1 then begin { <--- А здесь чему??? } Temp:=M[Item]; M[Item]:=M[item-1]; M[Item-1]:=Temp; end; end; end; end;
Гость
1.04.2006 18:02
В инете так!!! Где я при переделывании ошибся???
program Lab1; uses crt; const N=10; Range=100; var M:array [1..N] of integer; i,key,Result:integer; ch:char;
function Search(key:integer):integer; begin Search:=0; for i:=1 to N do if M[i]=key then Search:=i; end;
procedure WriteM; begin for i:=1 to N-1 do Write(M[i],','); Write(M[n]); WriteLn(''); end;
procedure Algorithm(Alg:byte;Item:integer); var Temp:integer; begin Case Alg of 1: begin Temp:=M[item]; for i:=Item downto 2 do M[I]:=M[I-1]; M[1]:=Temp; end; 2: begin if Item<>1 then begin Temp:=M[Item]; M[Item]:=M[item-1]; M[Item-1]:=Temp; end; end; end; end;
begin clrscr; Randomize; for i:=1 to N do M[i]:=random(range); WriteLn('Array:'); WriteM; Result:=0; while Result=0 do begin writeln('Enter a key of search'); {$I-} readln(key); {$I+} if IOResult<>0 then begin WriteLn('Wrong key!!!'); exit; end; Result:=Search(key); if Result<>0 then begin ch:=' '; WriteLn('Specify algorithm (1/2)'); While (ch<>'1') and (ch<>'2') do Readln(ch); case ch of '1':Algorithm(1,result); '2':algorithm(2,result); end; WriteLn('Result:'); WriteM; ch:=' '; WriteLn('Again? (y/n)'); While (ch<>'y') and (ch<>'n') do Readln(ch); case ch of 'n':exit; 'y':result:=0; end; end else WriteLn('Element is not Found'); end; end.
volvo
1.04.2006 18:14
А сам не видишь? Во второй программе значение item передается в процедуру Algorithm, а ты при переделывании добился того, что у тебя item описан локально, и в нем хранится мусор.
Гость
1.04.2006 18:19
Чето не пойму, где айтем передается в процедуру algorithm и если не трудно напиши куда мне это в мою прогу вставить.
volvo
1.04.2006 18:29
Цитата(Гость @ 1.04.2006 13:19)
Чето не пойму, где айтем передается в процедуру algorithm
Что по-твоему такое ВТОРОЙ параметр для процедуры algorithm?
case ch of '1':Algorithm(1,result); { <--- Здесь } '2':algorithm(2,result); { <--- и здесь? } end;
А вот что:
procedure Algorithm(Alg:byte;Item:integer); { первый параметр - способ сортировки, второй - значение Item } ...
А по-поводу куда это вставить... Ну, так это же твоя программа. Ты спросил, где ошибка, я тебе сказал. Решать, как исправлять - тебе...
Гость
1.04.2006 18:32
А я когда пытался присобачить этот result после 1 в скобке то выдавал ошибку, что надо закрыть скобку после 1, ща пробну еще раз, спасибки.
Гость
1.04.2006 19:16
Все пашет спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.