Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 279

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Помогите пожайлуста , написать программу, или хотя бы часть :
Создать процедуру TrimRightС(s,c), Удаляющую в строке S Конечные
символы,совпадающие с символом c.Строка S Является входным и выходным параметром.Дан символ c и пять строк,используя процедуру
TrimRightC, преобразовать данные строки

Приложение:
  1. program Lab_22;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils,
  7. windows;
  8.  
  9. var
  10. c:Char;
  11. s:string;
  12. i:integer;
  13.  
  14.  
  15. Procedure TrimRight(var s:string;c:char);
  16. begin
  17. for i:=0 to length(s) do
  18.  
  19. c:=s[length(s)];
  20. repeat c:=c+'[Length(s)]-i' until c<>s[length(S)];
  21. Delete(c,Length(s)) ;
  22.  
  23. end;
  24.  
  25.  
  26. begin
  27.  
  28. { TODO -oUser -cConsole Main : Insert code here }
  29. end.


Джон Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Джон (статус: Посетитель)
Вопрос отправлен: 4 июня 2010, 19:46
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Мережников Андрей

Здравствуйте, Джон! Пример в приложении.
"чтобы ответ не был слишком коротким написана эта фраза"

Приложение:
  1. procedure TrimRightC(var s:string; c:char);
  2. var f:boolean;
  3. begin
  4. f:=true;
  5. while (s<>'')and(f)
  6. do begin
  7. if s[length(s)]=c
  8. then begin
  9. if (length(s)=1)
  10. then s:=''
  11. else s:=copy(s,1,length(s)-1);
  12. end
  13. else f:=false;
  14. end;
  15. end;
  16.  


Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 4 июня 2010, 20:33
Оценка за ответ: 1

Комментарий к оценке: Спасибо конечно, но пограмма не то делает. Она просто Соединяет все строки. А не удаляет символ 'с'Конечные символы.
Если сможешь, исправь пожайлуста.
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;
  var
      s,S1,S2,S3,S4:string;
c:Char;
procedure TrimRightC(var s:string; c:char);
var f:boolean;


begin
  f:=true;
  while (s<>'')and(f)
  do begin
    if s[length(s)]=c
    then begin
          if (length(s)=1)
          then s:=''
          else s:=copy(s,1,length(s)-1);
         end
    else f:=false;
  end;

end;


begin
 SetconsoleTitle('лабораторная работа 21');
  Writeln;
  writeLn('Автор1');
  WriteLn('Вариант №3');
  WriteLn('Программа выводит строку содержащую символы строки S,между которыми ставит по одному пробелу');
  Writeln;
  write('Введите строку S');Readln(s);
  writeln;
  write('Введите строку S1');Readln(S1);
  WriteLn;
  write('Введите строку S2');Readln(S2);
  writeLn;
  write('Введите строку S3');Readln(S3);
  WriteLn;
  write('Введите строку S4');Readln(S4);
  writeLn;
  write('введите символ с');Readln(c);
  writeLn;
  begin

             writeln(' ',s,S1,S2,S3,S4);
  end;




readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.

Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 7 июня 2010, 22:11; участников в обсуждении: 4.
bugmenot

bugmenot (статус: 3-ий класс), 4 июня 2010, 20:48 [#1]:

типовые задания - такие типовые http://tinyurl.com/3342nyk
виконання програми розпочинається з того самого мiсця, де призупинилося.

Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 5 июня 2010, 21:00 [#2]:

После оценки «1» вам вряд ли кто-то что-то станет исправлять, ничего личного.

А вообще, по идее так:
while s[Length(s)] = c do Delete(s,Length(s),1);
Джон

Джон (статус: Посетитель), 5 июня 2010, 21:16 [#3]:

Я поставил как ты сказал, теперь просто соединяет все строки и все
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 6 июня 2010, 19:57 [#4]:

ошибка не в той процедуре, что я написал, а в том как ее используете! Где, собственно говоря, вызов процедуры???
Вы сами делаете так, что программа работает неправильно. Сначала запрашиваете несколько строк, символ c и просто тупо выводите в одну строку на экран:writeln(' ',s,S1,S2,S3,S4);
надо делать так:
s:=TrimRightC(s,c);
s1:=TrimRightC(s1,c);
s2:=TrimRight(s2,c);
s3:=TrimRight(s3,c);
s4:=TrimRight(s4,c);
writeln(s,' ',s1,' ',s2,' ',s3,' ',s4);
Прежде, чем ставить оценки, думать надо
Джон

Джон (статус: Посетитель), 7 июня 2010, 22:11 [#5]:

ДА я понял потом что вызвать надо, просто не знал как!!
Да программа действительно работает!!!!Все правильно делает !!
Извини за баллы!!!
Спасибо теБе большое, выручил!!!!!!!!!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.