2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помощь с задачей "Нули" [Pascal]
Сообщение15.02.2013, 21:03 


15/02/13
2
Прошу помочь с задачей
Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц.
Входные данные
В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100.
Выходные данные
В единственную строку выходного файла OUTPUT.TXT нужно вывести искомую длину цепочки нулей.

код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
var a, max, c:integer;
n:string
begin
assign (input, 'input.txt'); reset(input);
assgin (output, 'output.txt'); rewrite(output);
read(n);
c:=0;
max:=0;
 while not eof do begin
 read(a);
 if (a=0) then c:=c+1
 else if (c>max) then max:=c
 else c:=0
 end:
writeln(max);
end.
 

Всё отлично компилируется, но не подсчитывает нули. В ответ выводит 0. Не могу найти ошибку

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение15.02.2013, 21:40 
Аватара пользователя


07/02/11
19
Все правильно. Считайте сначала вашу строку вне цикла, а потом уже занимайтесь подсчетами. И в одном assign у вас опечатка.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 05:38 


15/02/13
2
Не выходит. Преобразовал еще вот так. Чтобы посимвольно проверять а. Но все равно в ответ выводит 0. Я вот не пойму, может с циклом что не так...
P.S.с assign я здесь опечатался. В программе этого не было
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
var max, c:integer;
n:string;
a:char;
begin
assign (input, 'input.txt'); reset(input);
assign (output, 'output.txt'); rewrite(output);
read(n);
c:=0;
max:=0;
 while not eof do begin
 read(a);
 if (a='0') then c:=c+1
 else if (c>max) then max:=c
 else c:=0
 end:
writeln(max);
end.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 06:05 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
А что такое "read(n);"? Зачем это, и что оно делает? А еще, разве reset и rewrite автоматически перенаправляют потоки в файлы? Мне казалось, это нужно указывать дополнительно.
Следующий забавный вопрос: где переменные, отвечающие файлам? Я не особо понимаю, как программа вообще компилируется. Тем более, при таком-то отсутствии всяких ";".

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 07:17 


26/01/10
959
Moriarter
Когда исправите ошибки в программе, попробуйте встать на место компьютера и точь-в-точь повторить, что он будет делать на каком-нибудь простом тесте типа 001000. Это необходимо, чтобы найти ошибки в алгоритме. Это я к тому, что ваша строчка
Код:
else if (c>max) then max:=c

вообще может не выполняться, и ответом будет 0. Например, когда единиц в строке совсем нет (0000). В общем, чтобы не делать ошибок, станьте на время самим компьютером.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 09:43 
Заслуженный участник


11/05/08
32166
Nemiroff в сообщении #684519 писал(а):
Следующий забавный вопрос: где переменные, отвечающие файлам?

input и output -- это системные файловые переменные, они определены по умолчанию.

Nemiroff в сообщении #684519 писал(а):
read(n);

Эта команда считывает всю строку, но оставляет несчитанными (в отличие от команды readln(n)) признаки конца строки. Потом в цикле только эти два оставшихся символа #13, #10 и считываются.

Moriarter в сообщении #684518 писал(а):
else if (c>max) then max:=c
else c:=0

Первый else должен быть никаким не else: у Вас из-за этого и счётчик обнуляется не всегда, когда положено, и (как заметил Zealint) максимум в конце может не обновиться.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 14:39 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
ewert в сообщении #684547 писал(а):
input и output -- это системные файловые переменные, они определены по умолчанию.

А-а-а.
ewert в сообщении #684547 писал(а):
Эта команда считывает всю строку, но оставляет несчитанными (в отличие от команды readln(n)) признаки конца строки. Потом в цикле только эти два оставшихся символа #13, #10 и считываются.

Ну вот я и не понял - зачем оно нужно - все нули ведь туда уйдут.
ewert в сообщении #684547 писал(а):
Первый else должен быть никаким не else

Лучше else. Просто нужно принудительно "с" обнулять.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 19:20 
Заслуженный участник


11/05/08
32166
Nemiroff в сообщении #684617 писал(а):
Лучше else. Просто нужно принудительно "с" обнулять.

Гораздо лучше этот первый else просто включить в then.

Nemiroff в сообщении #684617 писал(а):
Ну вот я и не понял - зачем оно нужно - все нули ведь туда уйдут.

Явно оно осталось просто по рассеянности, из-за разных там переделок. Я лишь пояснил, почему эта версия программы в принципе не может выдавать ничего, кроме нуля.

Да, кстати, я в этом месте процитировал именно Вас тоже исключительно по рассеянности. А с точками с запятой, если уж кстати -- в том тексте всё вполне в порядке. Т.е. две из них пропущены просто по синтаксической необходимости, а пропуск третьей пусть и неэстетичен,но и не является синтаксической ошибкой.

 Профиль  
                  
 
 Re: Помощь с задачей "Нули"
Сообщение16.02.2013, 22:30 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
ewert в сообщении #684728 писал(а):
а пропуск третьей пусть и неэстетичен,но и не является синтаксической ошибкой.

:oops: Не верил, пока сам не проверил. :oops:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group