Програмисты помогите новичку Pascal

Freeeej
Сообщения: 9
Зарегистрирован: 11 фев 2008, 21:22

1). Вставить в двухмерный массив перед всеми столбцами, в которых есть 0, первый столбец.
2). Найти строку с наибольшей суммой элементов. Вывести на печать найденную строку и суммы их элементов.
Все параметры вводить вручную. Написать прогу, не используя процедур и функций.
Это срочно!
Пожалуйста...
Заранее спасибо...
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Решение первой без процедур.
Ввод данных вручную 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]
Ни что так не ограничивает фантазию программиста, как компилятор...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Хыиуду, не, несходняк. В моем коде {something more} выполняется в любом случае, независимо от результата if (), а в твоем - только когда if () истинно.
На вопрос "А что вообще в конкретном случае может быть в {something more}?", ответ сходу: "а хрен его знает" :) Обсуждение и в самом деле становится "общетеоретическим".
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Да, это стопудово - демагогия, вот вам задачка в тему. Будьте сообразительны и честны )))) Только чур не запускать!!! Время на решение - не более 15 сек.
Вопрос: какое значение Х выведет 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
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Напрашивается следующее.
(X = Y) Никогда не будетистинным, т.к. X и Y "разминутся":
на 500-м проходе: X = 500, Y=501 (после чего Dec (Y))
на 501-м проходе: X = 501, Y=500

Т.е. цикл выполнится всю 1000 раз. А чему в этом случае равен счетчик цикла, насколько я слышал, compiler dependent. Чему должно быть "в теории" - точно не скажу: либо 1001, либо "не определено". Кажется даже второй вариант.
Serge_Bliznykov
Сообщения: 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]
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Serge_Bliznykov писал(а):Результаты прогона, если интересно,
то в TP7.0 программка выдала Writeln(x): 1000
откомпилённая под Delphi 5.0
Writeln(x): 1001
Раз уж тут как-то недавно бы вспомнен TP 3.02, то провел эксперимент в нем (затем и в TP 1.0, результат оказался тем же).
Но пришлост немного модифицировать исходный текст, т.к. те времена не было операторов 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
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Гыгыгы
&quot писал(а):Хыиуду, не, несходняк. В моем коде {something more} выполняется в любом случае, независимо от результата if (), а в твоем - только когда if () истинно.
На вопрос "А что вообще в конкретном случае может быть в {something more}?", ответ сходу: "а хрен его знает" Обсуждение и в самом деле становится "общетеоретическим".
for i := 1 to n do
begin
{something}
{something more}
if () then break ;
end;
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Medved писал(а):Гыгыгы

Код: Выделить всё

for i := 1 to n do
  begin
     {something}
     {something more}
      if () then break ;
   end;
Тоже не эквивалентный код. Вполне может быть так, что выполнение блока {something more} изменяет нечто, что влияет на результат вычисления условия if ().
Ответить