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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2018, 18:13   #1
PRIgorelie
Новичок
Джуниор
 
Регистрация: 11.10.2018
Сообщений: 2
По умолчанию Задача на сравнение строковых данных.

Дано 3 одинаковых сообщения(вводятся с клавиатуры) длинной до 50 символов, со случайными ошибками, сравнить эти сообщения и восстановить правильное(символ в определённом месте считается правильным если он повторяется дважды в разных сообщениях),
если восстановить не возможно вывести сообщение "impossible".
Вот моя программа, при запуска ошибки не выскакивают но ответ не выводиться, почему?
Код:
program soobschenie;
var a, b, c, e: string [50];
var n, d: integer;
begin
write('Enter your message 3 times:');
readln(a);
readln(b);
readln(c);
n := length (a);
d := 1;
   repeat
     begin
       if (a[d]=b[d]) 
         then
         e[d] := a[d]
       else if (a[d]=c[d])
         then
         e[d] := a[d]
       else if (b[d]=c[d])
         then
         e[d] := b[d]
       else
         writeln('impossible');
     n := n - 1;
     d := d + 1;
    end;
   until (n=0);
 writeln(e);
end.
Помогите пожалуйста!
PRIgorelie вне форума Ответить с цитированием
Старый 11.10.2018, 20:13   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

В древней Греции Эвклид написал бы так:
Код:
program soobschenie;
var a, b, c, e: string [50];
var n, d: integer;
var b0: boolean ;
begin
write('Enter your message 3 times:');
readln(a);
readln(b);
readln(c);
n := length (a);
d := 1;
e := Copy(a,1,50) ;
b0 := True ;
   repeat
       if (a[d]=b[d]) 
         then
         e[d] := a[d]
       else if (a[d]=c[d])
         then
         e[d] := a[d]
       else if (b[d]=c[d])
         then
         e[d] := b[d]
       else
         begin b0 := False; Break end ;
     n := n - 1;
     d := d + 1;
   until (n=0) ;

   if b0 then  writeln(e) else writeln ('ni figa sebe!');

end.
Ну и что с того, что по гречески ? Зато работает

Последний раз редактировалось digitalis; 11.10.2018 в 20:17.
digitalis вне форума Ответить с цитированием
Старый 11.10.2018, 20:33   #3
PRIgorelie
Новичок
Джуниор
 
Регистрация: 11.10.2018
Сообщений: 2
По умолчанию

Воу, спасибо. Кажется из-за того что массив е изначально пустой в него ничего не записывалось.
PRIgorelie вне форума Ответить с цитированием
Старый 12.10.2018, 11:20   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

I am not boy, I am old man
А никаких других отличий не заметил? что "impossible" будет повторятся до у.....и - это нормально?
begin-end внутри repeat-until нужны как зайцу велосипед.
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение содержимого файлов из строковых массивов Pilyla Общие вопросы C/C++ 4 17.09.2014 22:16
Сравнение текстовых(строковых) (строк,ячеек)массивов - с одинаковыми данными но по разному написанными! redyps Microsoft Office Excel 1 28.07.2013 15:58
Сравнение двух строковых переменных в C# ilshat09 Помощь студентам 7 27.02.2011 18:52
обработка строковых данных chainik1 Помощь студентам 0 12.12.2010 11:42