Цитата:
Сообщение от kulisk
Пожалуйста объясните программу.Вот условие:в заданной строке записаны 3 слова.Возможно ли переставляя и удаляя буквы первого слова добавляя буквы второго получить третье слово.Сама программа уже написана,мне нужно поэтапное объяснение к ней.
|
М-да... Мягко говоря, очень странный опус. На мой взгляд, программа вообще не решает поставленной задачи, т.е. работает неправильно. Ну давайте разбираться.
В первой части программы решается задача ввода с консоли трех слов. И делается это способом настолько диким, что ужас. Вместо того, чтобы написать три простые строчки типа
WriteLn('Word 1:'); ReadLn(s1);
WriteLn('Word 2:'); ReadLn(s2);
WriteLn('Word 3:'); ReadLn(s3);
там разведена бодяга со считыванием трех слов разом (одной строкой), после чего их натужно разделяют путем поиска символов пробелов, а в случае ненахождения пробелов программа молча вылетает, т.е. аварийно завершается. Без каких бы то ни было комментариев и пояснений.
Далее приступлено к решению самой задачи.
Тут требуется некое пояснение. Как я понял условие задачи, вопрос сводится к следующему: можно ли получить третье слово из букв, содержащихся в первых двух? Так вот, в программе это решается так: для каждой буквы третьего слова проверяется, есть ли такая буква в первом либо во втором слове (ну или в обоих). А теперь представьте, что первое слово - "муж", второе - "таз", третье - "мама". Программа в этом случае покажет положительный результат, между тем как понятно, что, поскольку требуется 2 буквы "м" и 2 буквы "а", результат должен быть отрицательным. Ведь в условии не сказано, что нет повторяющихся букв!
Не говоря уже о том, что там всюду понатыканы аварийные прерывания (Halt;), и это вместо того, чтобы вывести на экран информативное сообщение об ошибке, приостановить программу (чтобы пользователь смог эти сообщения прочитать), а уж только потом прерывать. Тоже и в конце - никакого останова. Опять Halt;
Ну вот Вам для начала материал к размышлению. Если нужна нормальная программа, можно подумать над этим.