HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail |
|
|
program lab3zad4; Uses CRT; const n=30; Var mas:array[1..n] of integer; i,j,a,b:integer; begin clrscr; randomize; for i:=1 to n do begin mas[i]:=random(20)-15; mas[20]:=2; write(mas[i]:5); end; writeln; i:=1; while mas[i]<0 do i:=i+1; writeln; writeln(mas[i]:3); writeln; write('индекс ',i); readln; end. |
Комментарии 1. Ноль не является положительным числом. while mas[i]<=0 do ... 2. А если в массиве нет положительных элементов? Тогда произойдет аварийное завершение по ошибке выхода индекса массива за допустимые границы при i=n+1. Посему должно быть: while (mas[i]<0) and (i<=n) do i:=i+1; if (i>n) then writeln('В массиве нет положительных элементов.') else ... to top
|
program lab3zad4; Uses CRT; const n=30; label m; Var mas:array[1..n] of integer; i,j,a,b:integer; begin clrscr; randomize; for i:=1 to n do begin mas[i]:=random(20)-15; write(mas[i]:3); end; writeln; for i:=1 to n do begin if mas[i]>=0 then begin writeln('первое положительное число= ',mas[i]); goto m; end; end; m: writeln; write('индекс ',i); readln; end. |
Комментарии 1. Ноль не является положительным числом. 2. Опять же, при отсутствии положительных элементов программа дойдет до последнего значения и благополучно напечатает его индекс. Еще раз я выступаю против меток. :-) Я бы написал здесь не с помощью for, а с помощью repeat until, но даже в случае for можно и нужно обойтись без меток: ... var found:boolean; ... found:=false; for i:=1 to n do if not found then if mas[i]>0 then begin writeln('первое положительное число= ',mas[i]); found:=true; end; writeln; if found then write('индекс ',i) else write('нет положительных элементов.'); ... to top
|
PROGRAM PEREMEN ; Uses CRT; label met; Const m=10; m1=20; Var mas:array[1..m,1..m1] of integer; i,j,k,n,a,b:integer; Begin ClrScr; Randomize; met: Writeln('Введите номера строк ');readln(k,n); if (k) or (n)>10 then begin writeln('неправильный номер строки'); goto met; end; For i:=1 to m do begin For j:=1 to m1 do begin mas[i,j]:=random(10); write(mas[i,j]:3); end; writeln; end; for j:=1 to m1 do begin a:=mas[k,j]; mas[k,j]:=mas[n,j]; mas[n,j]:=a; end; writeln; for i:=1 to m do begin for j:=1 to m1 do begin write(mas[i,j]:3); end; writeln; end; readln; end. |
Комментарии 1. В Паскале нельзя писать условия вроде "если к или н больше 10", нужно писать "если к больше 10 или н больше 10" и брать каждое условие в скобки. if (k>10) or (n>10) then 2. Всегда пишите, что значит "неправильный номер строки". "номер должен быть меньше",n 3. Вариант без метки: repeat writeln('Введите два номера строки меньше ',n); if (k>10) or (n>10) then writeln('неправильный номер строки'); until (k<=10) and (n<=10); 4. Вывод первоначальной матрицы сдалан правильно. Единственное надо написать, где вывод начальных а где конечных результатов. И я бы перед началом вывода строки написал бы "строка ",m,": ". Для удобства проверки. 5. При выводе конечной матрицы не нужны операторные скобки во внутреннем цикле 6. Форматирование кода можно улучшить. to top
|
program domik; uses crt; type zelci = record fam: string; sct, kv, kvp: longint; end; const n = 10; mas:array[1..n] of zelci = (( fam:'Иванов';sct:10; kv:16; kvp:400), (fam:'Петров';sct: 56; kv: 44; kvp:250), (fam:'Сидоров';sct:86; kv:15; kvp:300), (fam:'Сабакевич';sct:145; kv:59; kvp:345), (fam:'Иващенко';sct:55; kv:5; kvp:256), (fam:'Иродов';sct:1; kv:175; kvp:125), (fam:'Пискарев';sct:78; kv:69; kvp:123), (fam:'Середа';sct:35; kv:45; kvp:255), (fam:'Сучков';sct:2; kv:39; kvp:257), (fam:'Прикольченко';sct:16; kv:78; kvp:500)); var k,i,m:integer; y:byte; s:string; begin clrscr; y:=2; for i:=1 to n do begin with mas[i] do begin gotoxy(2,1); writeln('Фамилия'); gotoxy(2,y); write(fam); gotoxy(15,1); writeln('номер счета'); gotoxy(15,y); write(sct); gotoxy(29,1); writeln('номер квартиры'); gotoxy(29,y); write(kv); gotoxy(45,1); writeln('квартплата'); gotoxy(45,y); write(kvp); y:=y+2; end; end; writeln; gotoxy(1,y); writeln ('Задайте первую букву интересующей вас фамилии '); readln(s); Writeln('Данные на имя кот. нач. на указанную букву =->'); for I:= 1 to n do begin with mas[i] do begin if s = copy(fam,1,1) then writeln('Фамилия - ',fam,';',' Счет - ',sct,';',' Квартира - ',kv,';', ' Квартплата - ',kvp); end end; for i :=1 to n do begin with mas[i] do m:= kvp; k:=k+m end; writeln('общая сумма внесенной платы = '); writeln(k,'руб'); readln; end. |
HOME EXAMPLES |
|