|
Вопрос # 3 574/ вопрос открыт / |
|
Добрый вечер, уважаемые эксперты! Вот возникла проблемка. Задача вроде как сделана, и запускаеться и даные я ввожу, всё было бы хорошо если бы оно мне показовало результат. мне кажеться проблема в цикле. но я могу ошибаться. подскажите мне пожалуйста где я ошибся и как правельно устронить ошибку. задача ниже:
Приложение: Переключить в обычный режим- program Ryadki;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
- const n=10;
-
- i,j:Integer;
- sy:char;
- s:string;
- begin
- { TODO -oUser -cConsole Main : Insert code here }
- writeln('vvedite spisok slov');
- for i:=1 to n do read(list[i]);
- for i:=1 to n do
- begin
- s:=list[i];
- sy:=s[1];
- j:=1;
- while j<=Length(s) do if s[j]=sy then Delete(s,j,1)
- else inc(j);
- List[i]:=s;
- readln;
- end;
- writeln('S=', S);
- begin
- readln;
- end;
- end.
Ответ #1. Отвечает эксперт: Егор
Здравствуйте, Дементьев Евгений Владимирович!
Здесь ошибок две:
1. Используйте не read, а readln
2. Сделайте проверку на длину строки - вы пытаетесь читать первый символ из строки нулевой длины, поэтому и программа "вылетает", а дельфи, кстати, эту ошибку отлавливать будет только если установить проверку на выход за границы массива (меню Project - Options, вкладка Compiler, установите флажок Range Checking)
...
for i:=1 to n do
begin
readln(list[i]);
if length(List[i])=0 then continue;
s:=List[i];
sy:=s[1];
...
 |
Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 23 декабря 2009, 23:45
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 23 декабря 2009, 23:47; участников в обсуждении: 1.
|
Егор (статус: 10-ый класс), 23 декабря 2009, 23:47 [#1]:
ну или как паровоз насоветовал, с двумя циклами:
...
for i:=1 to n do readln(list[i]);
for i:=1 to n do
begin
if length(List[i])=0 then continue;
s:=List[i];
sy:=s[1];
...
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|