Татьяна Нетова-омлетова Опубликовано 19 ноября, 2011 Жалоба Поделиться Опубликовано 19 ноября, 2011 Помогите кто чем может!!) Надо вот эти программы написать на c++. Заранее большое спасибо. 1. Создать список из целых чисел. Исключить из списка все элементы, равные x. Выполнить в трех вариантах: со стеком, очередью и двунаправленным списком. Каждая операция со списком (инициализация списка, добавление, удаление и просмотр элемента списка) должна оформляться в виде подпрограммы. Ввод-вывод данных файловый. 2. Дан многочлен от одной переменной. Разработать подпрограмму, реализующую подсчет значения многочлена для заданного значения x. 3. В файле input.txt хранится последовательность целых чисел. По входной последовательности построить дерево бинарного поиска и удалить из него все узлы, хранящие нечетные значение 4. Бинарное дерево в файле input.txt представлено следующей структурой: предок (для корня предок=0); признак поддерева: 0-левое 1-правое; узел: 0 0 7 7 0 25 7 1 12 25 0 3 25 1 18 Построить копию заданного дерева. 5. Исключить из неориентированного графа данную вершину. Использовать представление графа в виде матрицы смежности. 6. Подсчитать количество сильно связных компонент ориентированного графа. Использовать обходы в ширину или в глубину. Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Здравствуйте. Не могу создать программу для решения задачи на Паскале. Все задачи сделал, кроме этой. Алгоритм не могу составить. 4. Разработайте алгоритм и решите задачу. Имеется три ключа от трех дверей с различными замками. Каждый ключ подходит только к одной двери. Какое минимальное количество проб необходимо сделать, чтобы подобрать ключи? Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) Ммм... нужен исходник или же блок-схема. Сама задача тривиальная, но она из области комбинаторики, т.е. понятие min-max будет лежать в диапазоне... есть конечно формула, но в данном случае она не требуется - все решается на уровне random: - случайная установка замков в N - диапазоне; - случайная установка ключей в F(N) - диапазоне; - случайный подбор ключ-замок в T(N-1) - диапазоне. Это и есть алгоритм решения. Исходник нужен? Изменено 20 ноября, 2011 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Имеется три ключа от трех дверей с различными замками. Каждый ключ подходит только к одной двери. Какое минимальное количество проб необходимо сделать, чтобы подобрать ключи? Я может быть чего-то не понимаю, но минимальным количеством проб будет 0, т.е. мы сразу угадали какой ключ от какого замка :) Конечно, вероятность такая довольно мала, но не исключена. Ну, а так надо три пробы. Сначала подбираем ключ к первому замку, пробуем один ключ, если не подошёл, второй, если не подошёл, значит к этому замку подходит третий ключ. Потом подбираем ключ ко второму замку, проверяем первый, если не подошёл, значит к этому замку подходит второй ключ, а к третьему - первый. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 немного не так, если решать классически. 1. Нужна матрица проб ошибок. 2. Подбор должен происходить рандомно. По сути то я не вижу проблемы в этой задачи, ну если только не знание языка программирования. :rolleyes: Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Оффтоп немного не так, если решать классически.1. Нужна матрица проб ошибок.2. Подбор должен происходить рандомно.По сути то я не вижу проблемы в этой задачи, ну если только не знание языка программирования. :rolleyes: Ну, я ни разу не программист. Но если бы встала такая задача, решил именно так, как написал. Не совсем понял что у меня не рандомно. :) Ведь после пробы ключ надо как-то помечать, что он не подошёл, или всё равно сваливать в общую кучу и из неё рандомно опять выбирать? Если второй вариант, то количество проб резко возрастает :)Алгоритм расстановки ключей и замков я расписывать не стал, потому как тут должно быть и так всё понятно. Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Язык Паскаль только изучать начали несколько дней назад. Теорию проб и ошибок еще не изучали. Поэтому просто даже не понимаю, в чем смысл данной задачи и как ее реализовать именно в Паскале. Никогда не делал задачи подобного типа. Может хотя бы пример программы скинете? О Random слышал, что позволяет выбирать числа в случайном порядке :rolleyes: Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 1. Используем Google комбинаторика примеры решения задач Паскаль 2. komb.doc Я не очень искал схожую задачу, просто искал нечто подобное. Да, советую использовать Паскаль - Система программирования PascalABC.NET удобный инструмент для изучения языка + многофункциональный. komb.doc Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) Минимальным количеством необходимых для установления принадлежности ключей к замкам проб ноль не будет - мало правильно угадать, надо еще доказать правильность догадки. А для этого надо, как минимум, вставить два ключа в подходящие замки, то есть минимум - две пробы. А максимум необходимого количества проб - три пробы. Пробуем ключ 1 на замке 1. Если подходит, пробуем ключ 2 на замке 2. Если подходит, то ключ 3 обязательно подойдет к замку 3, можно не пробовать. Если ключ 2 к замку 2 не подойдет, то он от замка 3, а оставшийся ключ 3 от замка 2, тоже можно не пробовать. Понадобились две пробы. Теперь случай когда ключ 1 не подошел к замку 1. На том же замке пробуем ключ 2. Если ключ 2 подошел, то остались два ключа (1 и 3) и два замка (2 и 3), нужна еще одна проба, всего будет три пробы. Если ключ 2 не подошел, то, значит, к замку 1 подойдет ключ 3, остается опять же два ключа (1 и 2) и два замка (2 и 3) и нужна еще одна проба. Итак, минимальное количество необходимых для установления принадлежности проб две, максимальное - три. Остается вопрос, при чем тут Паскаль? Это чистая математика. Изменено 20 ноября, 2011 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Тролль "А максимум необходимого количества проб - три пробы." немного не верно, три пробы нужно при условии если один ключ ложный - Cn^m = {n!}/{m! (n-m)!} Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Минимальным количеством необходимых для установления принадлежности ключей к замкам проб ноль не будет - мало правильно угадать, надо еще доказать правильность догадки. А для этого надо, как минимум, вставить два ключа в подходящие замки, то есть минимум - две пробы. А максимум необходимого количества проб - три пробы. Пробуем ключ 1 на замке 1. Если подходит, пробуем ключ 2 на замке 2. Если подходит, то ключ 3 обязательно подойдет к замку 3, можно не пробовать. Понадобились две пробы. Теперь случай когда ключ 1 не подошел к замку 1. На том же замке пробуем ключ 2. Если ключ 2 подошел, то остались два ключа (1 и 3) и два замка (2 и 3), нужна еще одна проба, всего будет три пробы. Если ключ 2 не подошел, то, значит, к замку 1 подойдет ключ 3, остается опять же два ключа (1 и 2) и два замка (2 и 3). Итак, минимальное количество необходимых для установления принадлежности проб две, максимальное - три. Остается вопрос, при чем тут Паскаль? Это чистая математика. Ну в принципе это все логично.Но вот как в Паскале это все сделать? я ума не приложу... а это обязательно Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Но вот как в Паскале это все сделать? я ума не приложу... а это обязательно я бы написал' date=' но думаю Тролль напишет раньше :D Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Indomito, я бы написал, но не понимаю, чем тут должен заниматься Паскаль в его сегодняшнем воплощении в языке программирования? ;) Моделированием процесса подбора ключей на случайном сочетании комбинаций ключей и замков? В условии об этом ни слова. Выводом алгоритма решения? Паскаль для записи готовых алгоритмов, а не их нахождения... Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Судя по условию Имеется три ключа от трех дверей с различными замками. Каждый ключ подходит только к одной двери. Какое минимальное количество проб необходимо сделать, чтобы подобрать ключи? Надо написать всего одну строчку, типа printf "2" :) Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Indomito, я бы написал, но не понимаю, чем тут должен заниматься Паскаль в его сегодняшнем воплощении в языке программирования? ;) Моделированием процесса подбора ключей на случайном сочетании комбинаций ключей и замков? В условии об этом ни слова. Выводом алгоритма решения? Паскаль для записи готовых алгоритмов, а не их нахождения... Я считаю, что Паскаль тут должен работать по типу: ключ подходит? - да или нет, идем дальше. Типа: beginwriteln('Первый ключ к первой двери. Подходит?');readln(a);if a='Да' then writeln('Берем второй ключ.')else beginwriteln('Второй ключ подходит к 1му замку?');readln(a);if ......................end;end; Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 По сути да, только зачем диалог то? 1. Генерация замков-ключей. 2. Подбор ключ к замку. 3. Вывод результатов. ИМХО диалог тут не нужен, т.к. это чисто мат. обработка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) AntonyDed Indomito правильно заметил, никаких readln(a) писать не надо, решение ищет программа, а не ты. Программу в кратком виде приведу ниже. Программа случайным образом генерирует набор ключей к замкам, а потом подбирает их. По ходу работы программа печатает свои достижения. Если в программу вводить пояснения к каждому ее выбору, получится довольно протяженная беллетристика. Если хочешь, то перед каждым if допиши вывод в словах проверяемого условия. Например, вместо if 2=k[1] then надо будет написать writeln('Первый ключ ко второй двери. Подходит?"); if 2=k[1] then begin writeln('Подошел...') и так далее. Иногда придется заключать эти операторы в begin ... end uses crt;var k:array[1..3]of byte; i,j,p,q:byte;begin randomize; repeatclrscr; for i:=1 to 3 do k[i]:=i; for j:=3 downto 1 do begin p:=random(j)+1;q:=k[p];k[p]:=k[j];k[j]:=q end;writeln('Nums of keys: 1 2 3');writeln('Locks of keys: ',k[1]:2,k[2]:2,k[3]:2); writeln;if 1=k[1] then begin writeln('Z1 - K1'); if 2=k[2] then writeln('Z2 - K2'#10#13'Z3 - K3') else writeln('Z2 - K3'#10#13'Z3 - K2') endelse if 1=k[2] then begin writeln('Z1 - K2'); if 2=k[1] then writeln('Z2 - K1'#10#13'Z3 - K3') else writeln('Z2 - K3'#10#13'Z3 - K1') end else begin writeln('Z1 - K3'); if 2=k[1] then writeln('Z2 - K1'#10#13'Z3 - K2') else writeln('Z2 - K2'#10#13'Z3 - K1') end;write('Once more (1/0)? ');until(readkey<>'1')end. Изменено 20 ноября, 2011 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 AntonyDed Indomito правильно заметил, никаких readln(a) писать не надо, решение ищет программа, а не ты. Программу в кратком виде приведу ниже. Программа случайным образом генерирует набор ключей к замкам, а потом подбирает их. По ходу работы программа печатает свои достижения. Если в программу вводить пояснения к каждому ее выбору, получится довольно протяженная беллетристика. Если хочешь, то перед каждым if допиши вывод в словах проверяемого условия. Например, вместо if 2=k[1] then надо будет написать writeln('Первый ключ ко второй двери. Подходит?"); if 2=k[1] then begin writeln('Подошел...') и так далее. Иногда придется заключать эти операторы в begin ... end uses crt;var k:array[1..3]of byte; i,j,p,q:byte;begin randomize; repeatclrscr; for i:=1 to 3 do k[i]:=i; for j:=3 downto 1 do begin p:=random(j)+1;q:=k[p];k[p]:=k[j];k[j]:=q end;writeln('Nums of keys: 1 2 3');writeln('Locks of keys: ',k[1]:2,k[2]:2,k[3]:2); writeln;if 1=k[1] then begin writeln('Z1 - K1'); if 2=k[2] then writeln('Z2 - K2'#10#13'Z3 - K3') else writeln('Z2 - K3'#10#13'Z3 - K2') endelse if 1=k[2] then begin writeln('Z1 - K2'); if 2=k[1] then writeln('Z2 - K1'#10#13'Z3 - K3') else writeln('Z2 - K3'#10#13'Z3 - K1') end else begin writeln('Z1 - K3'); if 2=k[1] then writeln('Z2 - K1'#10#13'Z3 - K2') else writeln('Z2 - K2'#10#13'Z3 - K1') end;write('Once more (1/0)? ');until(readkey<>'1')end. Ой-ой-ой ))) это серьезно ))) Преподаватель вряд ли примет такой вариант, потому что поймет, что я его сам сделать просто не мог ))) А засчет чего вы добиваетесь того, чтобы диалог на экране просто обновлялся при вводе, например, числа 1, а не шел вниз и пополнялся новыми словами и цифрами ? ) Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) А засчет чего вы добиваетесь того, чтобы диалог на экране просто обновлялся при вводе, например, числа 1, а не шел вниз и пополнялся новыми словами и цифрами ? Подозреваю, что вот тут: clrscr; for i:=1 to 3 do k:=i; Изменено 20 ноября, 2011 пользователем kvazimoda Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) Решение задачи на самом деле относится не к программированию, а к логике. Правильная программа по условию на самом деле будет выглядеть так: begin writeln('Необходимо сделать минимально от 2 до 3 проб, как повезет :) '); readln end. Но боюсь, что такую программу преподаватель точно не примет ;) О Random слышал, что позволяет выбирать числа в случайном порядке :rolleyes:Не совсем так. Она позволяет генерировать последовательность псевдослучайных чисел, но вовсе не гарантирует от их повторения, как и при бросании кубика. Поэтому просто берем числа 1, 2 и 3 и тасуем их в случайном порядке, вот для этого уже применяем random. Алгоритм тасования берем из библии алгоритмов "Искусство программирования" Дональда Кнута. Хотя есть и другой метод, не столь элегантный и гораздо менее экономичный: первое число берем случайным, второе тоже, но берем уже только число, не совпадающее с первым, если нет, берем еще одно число, и так далее. А засчет чего вы добиваетесь того, чтобы диалог на экране просто обновлялся при вводе, например, числа 1, а не шел вниз и пополнялся новыми словами и цифрами ?Тут kvazimoda уже все объяснил :)P.S. Только сейчас заметил, что по поводу условия kvazimoda тоже уже сказал практически то же, что и я: "Надо написать всего одну строчку, типа printf "2" " :) Изменено 20 ноября, 2011 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Не совсем так. Она позволяет генерировать последовательность псевдослучайных чисел' date=' но вовсе не гарантирует от их повторения, как и при бросании кубика.[/quote'] тут ты немного ошибаешься, т.к. берёшь за прообраз классическую функцию RND, но она имеет много вариантов реализации, а точнее параметров входных и одним из них фигурирует флаг не повторения в предузнанном диапазоне генерации. Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 Тролль обьясни пожалуйста данную строчку:if(s[0]>='+' && s[0]<='9' (чтоо здесь происходит) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 ноября, 2011 Жалоба Поделиться Опубликовано 20 ноября, 2011 (изменено) temich5000 temich5000 Ниже - кусок кода для твоей программы, оформленный как отдельная программка для тестирования его работы. ...scanf("%s",s); if(s[0]>='+' && s[0]<='9')break; else printf("Error! Once more!\n");}... Вводится строка, затем проверяется, начинается ли она чем-то годящимся как начало числа, если да, то мы выходим на продолжение работы и там преобразуем ее в нужные нам число и символ, если нет, с возмущенными воплями возвращаемся обратно. if(s[0]>='+' && s[0]<='9') и есть проверка, начинается ли строка с того символа, с которого может начинаться число. А буква, например, условия не выполнит и будет предложено повторить ввод. Изменено 20 ноября, 2011 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serty Опубликовано 21 ноября, 2011 Жалоба Поделиться Опубликовано 21 ноября, 2011 Здравствуйте! Нужна помощь в программировании на C++ Builder. Возможно ли это? Программа у меня имеется, но надо её подкорректировать... Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 21 ноября, 2011 Жалоба Поделиться Опубликовано 21 ноября, 2011 (изменено) Здравствуйте! Нужна помощь в программировании на C++ Builder. Возможно ли это? Программа у меня имеется, но надо её подкорректировать... Я думаю, возможно. :) Изменено 21 ноября, 2011 пользователем kvazimoda Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти