Задача по Turbo Pascal

Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

14 ноя 2007, 11:16

Тогда, чувствую, ошибка где-то в логике. Можно переделать: найти строку с минимальным количеством ненулевых элементов - это то же самое, что найти строку с максимумом нулей

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

max_zero:=0;
for i:= 1 to mi do begin
zero:=0;
for j:= 1 to mj do if a[i,j]=0 then inc(zero);
if zero>ax_zero then begin
   max:=i;
   max_zero:=zero;
   end;
end;
Writeln('Minimalno nenulevih elementov v stroke №',max);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

15 ноя 2007, 20:46

Всё заработало огромное спасибо ввёл тесты и всё что нужно получилось
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

15 ноя 2007, 22:02

Собственно ещё есть маленький вопросик. Прога вычисляет наибольший общий делитель двух целых чисел.
var
n1,n2:integer;
nod:integer;
r:integer;
begin
writeln('вычисление наибольшего общего делителя двух целых чисел');
writeln('введите в одной строке два числа');
readln(n1,n2);
while (n1 mod n2)<>0 do
begin
r:=n1 mod n2;
n1:=n2;
n2:=r;
end;
nod:=n2;
writeln;
readln;
end.
Мне нужно написать её через цикл repeat. Они взаимозаменяемы но у меня не получается
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

15 ноя 2007, 22:50

вот уж проще некуда... вместо

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

while (n1 mod n2)<>0 do
begin
...
end;
поставьте

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

repeat
  ...
until (n1 mod n2)=0;
только учтите, что в этом случае тело выполниться хотя бы одина раз!! ВСЕГДА!
поэтому, возможно, прийдётся добавить проверку перед циклом:

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

if (n1 mod n2)<>0 then
repeat
  ...
until (n1 mod n2)=0;
p.s. извините, но в текст сайо программы не вчитывался..
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

16 ноя 2007, 13:44

А можно узнать, зачем в конце программы
writeln;
readln;
если все равно в консоль по ходу работы ничего не выводится?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

18 ноя 2007, 18:35

Я просто не стал переписывать длинную строчку на русском
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

18 ноя 2007, 18:41

Serge_Bliznykov, пишет ошибку когда уже скомпилирована и ввожу два числа. Дословно error 200:division by zero
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

19 ноя 2007, 15:32

Есть мнение, что первое число должно быть больше второго. Если я правильно помню алгоритм Евклида
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

21 ноя 2007, 21:51

Извиняюсь за нубство но что такое inc(zero) где не смотрю такого нету и никто не знает а мне ведь надо объяснить что это преподу
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

22 ноя 2007, 15:14

Поставить курсор на непонятное слово и нажать Ctrl+F1;
inc(zero) <=> zero:=zero+1;
inc(zero, N) <=> zero:=zero+N;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить