Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Дано 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, 21:13   #2
digitalis
Профессионал
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 1,110
Репутация: 401
По умолчанию

В древней Греции Эвклид написал бы так:
Код:

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 в 21:17.
digitalis вне форума   Ответить с цитированием
Старый 11.10.2018, 21:33   #3
PRIgorelie
Новичок
 
Регистрация: 11.10.2018
Сообщений: 2
Репутация: 10
По умолчанию

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение содержимого файлов из строковых массивов 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 19:52
обработка строковых данных chainik1 Помощь студентам 0 12.12.2010 12:42


13:50.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru