Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2016, 10:53   #1
destra1j
Пользователь
 
Регистрация: 04.05.2016
Сообщений: 47
Радость (PascalABC.NET)подскажите где я ошибся

Код:
var f,f1:text;
s:string;
begin
  assign(f,'f.txt');
  rewrite(f);
  writeln('Вводите строки файла(пустая строка конец ввода):');
  repeat
    readln(s);
    if s<>''then writeln(f,s);
   until s='';
   close(f);
   reset(f);
   assign(f1,'f1.txt');
   rewrite(f1);
   while not eof(f) do 
   begin
     readln(f,s);
     while length(s)>0 do delete(s,length(s),1); 
     writeln(f1,s);
     while(s[length(s)]='')do delete(s,length(s),1);
     writeln(f1,s);
   end;
   close(f);
   close(f1);
  writeln('Готово');
end.
Программа должна записывать строки в файл а потом убирать пропуски в конце его строчек.Программа должна записывать строки до тех пор пока пользователь не введет пустую строчку.Она запускается но когда вводится пустая строка она не перееходит так сказать к фазе убирания пропусков а требует больше строчек .
destra1j вне форума Ответить с цитированием
Старый 06.05.2016, 11:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
while length(s)>0 do delete(s,length(s),1);
это что за ужас, летящий на крыльях ночи?!!

сравните со строчкой, которую Вам давал:
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
     while (Length(s)>0) and (s[Length(s)]=' ') do Delete(s, Length(s), 1);
никаких отличий не видите?!

Ваш код делает из любой строки - пустую
while length(s)>0 do delete(s,length(s),1);
пока длина строки больше нуля делать удаление последнего символа строки.
вместо этого цикла можно просто написать
s:='';

но это ещё не всё.
потом Вы пишете цикл:
Цитата:
Код:
while(s[length(s)]='')do delete(s,length(s),1);
у пустой строки (вы же её только что обнулилил двумя строчками выше) - длина равна нулю. в вашем Pascal ABC.NET обращение к s[0] выводит ошибку выхода индекса за пределы массива (и правильно, кстати, делает).
Всё. Финиш. программа прерывается.

Зачем Вам эти два цикла while по строке s и что они должны делать?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.05.2016, 15:19   #3
destra1j
Пользователь
 
Регистрация: 04.05.2016
Сообщений: 47
По умолчанию

да уж я и не думал что я так сильно начудил просто уменя писало что нельзя использовать and ну я и подумал что можно так сделать.
destra1j вне форума Ответить с цитированием
Старый 06.05.2016, 15:20   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от destra1j Посмотреть сообщение
да уж я и не думал что я так сильно начудил просто уменя писало что нельзя использовать and ну я и подумал что можно так сделать.
скобки может дополнительные захотел? и так программировать точно нельзя - у меня не заработало - удалю пол кода, авось заработает
Alar вне форума Ответить с цитированием
Старый 06.05.2016, 15:41   #5
destra1j
Пользователь
 
Регистрация: 04.05.2016
Сообщений: 47
По умолчанию

так у меня с and не работает как мне решить эту проблему?
destra1j вне форума Ответить с цитированием
Старый 06.05.2016, 15:46   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
как мне решить эту проблему?
Правильно код от Сержа скопипастить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.05.2016, 15:58   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от destra1j Посмотреть сообщение
так у меня с and не работает как мне решить эту проблему?
Извините, но Вы не пробовали В ТОЧНОСТИ набрать код, который я написал?!
Со всеми знаками, включая скобочки?!

я проверил, код работает в Pascal ABC.NET

Код:
   while not eof(f) do 
   begin
     readln(f,s);
     while (Length(s)>0) and (s[Length(s)]=' ') do Delete(s, Length(s), 1);
     writeln(f1,s);
   end;
p.s. если Вам сложно правильно набрать код, так может быть, проще выделить его на форуме мышкой, скопировать в буфер обмена, открыть код программы и ВСТАВИТЬ код в окошко редактора?!!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не понимаю где ошибся в первом уроке по C++ not always found Общие вопросы C/C++ 3 06.07.2013 23:47
Сортировка, где ошибся в логике программы? spokey Помощь студентам 4 09.04.2013 23:16
Транслировал код с C++, где ошибся? Crystallon Общие вопросы Delphi 4 10.05.2012 02:31
Объясните пожалуйста, где и как ошибся Manchester Паскаль, Turbo Pascal, PascalABC.NET 10 09.02.2009 20:51
Не разберу где ошибся, по моему много напутал Forro Паскаль, Turbo Pascal, PascalABC.NET 6 14.01.2008 14:19