Програмисты помогите новичку Pascal
1). Вставить в двухмерный массив перед всеми столбцами, в которых есть 0, первый столбец.
2). Найти строку с наибольшей суммой элементов. Вывести на печать найденную строку и суммы их элементов.
Все параметры вводить вручную. Написать прогу, не используя процедур и функций.
Это срочно!
Пожалуйста...
Заранее спасибо...
2). Найти строку с наибольшей суммой элементов. Вывести на печать найденную строку и суммы их элементов.
Все параметры вводить вручную. Написать прогу, не используя процедур и функций.
Это срочно!
Пожалуйста...
Заранее спасибо...
Решение первой без процедур.
Ввод данных вручную N строк по N чисел, между числами пробелы.
[syntax='Pascal']
program New_Project;
const
N=5;
N2=2*N+1;
var
Matr:array[1..N,1..N2]of integer;
Matr2:array[1..N,1..N2]of integer;Count:integer;
i,j,k:integer;
NextIdx:integer;
b0:boolean;
begin
for i:=1 to N do
begin
for j:=1 to N do
read(Matr[i,j]);
readln;
end;
NextIdx:=0;
Count:=N;
for i:=1 to N do
begin
B0:=false;
for j:=1 to N do
if Matr[j,i]=0 then
b0:=true;
if b0 then
begin
Inc(NextIdx);
for k:=1 to N do
Matr2[k,NextIdx]:=Matr[k,1];
inc(count);
end;
Inc(NextIdx);
for k:=1 to N do
Matr2[k,NextIdx]:=Matr[k,i];
end;
writeln;
for i:=1 to N do
begin
for j:=1 to Count do
write(Matr2[i,j]:2,' ');
writeln;
end;
readln;
end.
[/syntax]
Вторая.
Метод ввода тот же.
[syntax='Pascal']
program New_Project;
const
N=5;
var
Matr:array[1..N,1..N]of integer;
i,j:integer;
idx,sum,max:integer;
begin
for i:=1 to N do
begin
for j:=1 to N do
read(Matr[i,j]);
readln;
end;
for i:=1 to n do
begin
for j:=1 to N do
write(Matr[i,j]:2,' ');
writeln;
end;
max:=low(integer);
for i:=1 to N do
begin
sum:=0;
for j:=1 to N do
inc(sum,Matr[i,j]);
if sum > max then
begin
Max:=sum;
idx:=i;
end;
end;
writeln;
writeln('Строка:');
writeln;
for i:=1 to n do
write(matr[idx,i],' ');
writeln;
writeln;
writeln('Сумма элементов: ',max);
readln;
end.
[/syntax]
Ввод данных вручную N строк по N чисел, между числами пробелы.
[syntax='Pascal']
program New_Project;
const
N=5;
N2=2*N+1;
var
Matr:array[1..N,1..N2]of integer;
Matr2:array[1..N,1..N2]of integer;Count:integer;
i,j,k:integer;
NextIdx:integer;
b0:boolean;
begin
for i:=1 to N do
begin
for j:=1 to N do
read(Matr[i,j]);
readln;
end;
NextIdx:=0;
Count:=N;
for i:=1 to N do
begin
B0:=false;
for j:=1 to N do
if Matr[j,i]=0 then
b0:=true;
if b0 then
begin
Inc(NextIdx);
for k:=1 to N do
Matr2[k,NextIdx]:=Matr[k,1];
inc(count);
end;
Inc(NextIdx);
for k:=1 to N do
Matr2[k,NextIdx]:=Matr[k,i];
end;
writeln;
for i:=1 to N do
begin
for j:=1 to Count do
write(Matr2[i,j]:2,' ');
writeln;
end;
readln;
end.
[/syntax]
Вторая.
Метод ввода тот же.
[syntax='Pascal']
program New_Project;
const
N=5;
var
Matr:array[1..N,1..N]of integer;
i,j:integer;
idx,sum,max:integer;
begin
for i:=1 to N do
begin
for j:=1 to N do
read(Matr[i,j]);
readln;
end;
for i:=1 to n do
begin
for j:=1 to N do
write(Matr[i,j]:2,' ');
writeln;
end;
max:=low(integer);
for i:=1 to N do
begin
sum:=0;
for j:=1 to N do
inc(sum,Matr[i,j]);
if sum > max then
begin
Max:=sum;
idx:=i;
end;
end;
writeln;
writeln('Строка:');
writeln;
for i:=1 to n do
write(matr[idx,i],' ');
writeln;
writeln;
writeln('Сумма элементов: ',max);
readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
Ну зачем же такую проктологию делать!BBB писал(а):Тот же, если после этого if-а не нужны еще какие-либо операторы. Т.е. вроде этого:Код: Выделить всё
for i := 1 to n do begin {something} if () then i:=n; {something more} end;
Код: Выделить всё
for i := 1 to n do
begin
{something}
if () then begin
{something more}
break;
end;
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Хыиуду, не, несходняк. В моем коде {something more} выполняется в любом случае, независимо от результата if (), а в твоем - только когда if () истинно.
На вопрос "А что вообще в конкретном случае может быть в {something more}?", ответ сходу: "а хрен его знает"
Обсуждение и в самом деле становится "общетеоретическим".
На вопрос "А что вообще в конкретном случае может быть в {something more}?", ответ сходу: "а хрен его знает"

Да, это стопудово - демагогия, вот вам задачка в тему. Будьте сообразительны и честны )))) Только чур не запускать!!! Время на решение - не более 15 сек.
Вопрос: какое значение Х выведет Writeln?
Вопрос: какое значение Х выведет Writeln?
Код: Выделить всё
var x,y : integer;
begin
y := 1000;
for x := 1 to 1000 do
begin
If x = y then break;
dec(y);
end;
Writeln(x);
end.
It's a long way to the top if you wanna rock'n'roll
Напрашивается следующее.
(X = Y) Никогда не будетистинным, т.к. X и Y "разминутся":
на 500-м проходе: X = 500, Y=501 (после чего Dec (Y))
на 501-м проходе: X = 501, Y=500
Т.е. цикл выполнится всю 1000 раз. А чему в этом случае равен счетчик цикла, насколько я слышал, compiler dependent. Чему должно быть "в теории" - точно не скажу: либо 1001, либо "не определено". Кажется даже второй вариант.
(X = Y) Никогда не будетистинным, т.к. X и Y "разминутся":
на 500-м проходе: X = 500, Y=501 (после чего Dec (Y))
на 501-м проходе: X = 501, Y=500
Т.е. цикл выполнится всю 1000 раз. А чему в этом случае равен счетчик цикла, насколько я слышал, compiler dependent. Чему должно быть "в теории" - точно не скажу: либо 1001, либо "не определено". Кажется даже второй вариант.
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
да... потянуло вас, господа в дебри тёмные, леса нехоженные ;-))))
использовать счётчик цикла FOR вне цикла ( так же, как и менять его внутри цикла) - МОВЕТОН!
Результаты прогона, если интересно,
то в TP7.0 программка выдала Writeln(x): 1000
откомпилённая под Delphi 5.0
Writeln(x): 1001
вот под Delphi с моими опциями компайлера, если кто захочет проверить ;-)))
[syntax='Delphi']
{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
program Project1;
{$APPTYPE CONSOLE}
var x,y : integer;
begin
y := 1000;
for x := 1 to 1000 do
begin
If x = y then break;
dec(y);
end;
Writeln(x);
end.
[/syntax]
использовать счётчик цикла FOR вне цикла ( так же, как и менять его внутри цикла) - МОВЕТОН!
Результаты прогона, если интересно,
то в TP7.0 программка выдала Writeln(x): 1000
откомпилённая под Delphi 5.0
Writeln(x): 1001
вот под Delphi с моими опциями компайлера, если кто захочет проверить ;-)))
[syntax='Delphi']
{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
program Project1;
{$APPTYPE CONSOLE}
var x,y : integer;
begin
y := 1000;
for x := 1 to 1000 do
begin
If x = y then break;
dec(y);
end;
Writeln(x);
end.
[/syntax]
Раз уж тут как-то недавно бы вспомнен TP 3.02, то провел эксперимент в нем (затем и в TP 1.0, результат оказался тем же).Serge_Bliznykov писал(а):Результаты прогона, если интересно,
то в TP7.0 программка выдала Writeln(x): 1000
откомпилённая под Delphi 5.0
Writeln(x): 1001
Но пришлост немного модифицировать исходный текст, т.к. те времена не было операторов break и Dec.
[syntax='Pascal']program Project1;
label _ex;
var x,y : integer;
begin
y := 1000;
for x := 1 to 1000 do
begin
{If x = y then break;}
If (x = y) then goto _ex;
{dec(y);}
y := y - 1;
end;
_ex:
Writeln(x);
end.[/syntax]Результат: 1000
Гыгыгы
begin
{something}
{something more}
if () then break ;
end;
for i := 1 to n do" писал(а):Хыиуду, не, несходняк. В моем коде {something more} выполняется в любом случае, независимо от результата if (), а в твоем - только когда if () истинно.
На вопрос "А что вообще в конкретном случае может быть в {something more}?", ответ сходу: "а хрен его знает" Обсуждение и в самом деле становится "общетеоретическим".
begin
{something}
{something more}
if () then break ;
end;
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
[OK]
Тоже не эквивалентный код. Вполне может быть так, что выполнение блока {something more} изменяет нечто, что влияет на результат вычисления условия if ().Medved писал(а):Гыгыгы
Код: Выделить всё
for i := 1 to n do begin {something} {something more} if () then break ; end;