Решение Задачи к учебнику Ушаков,Юркова, Помогите с решением задачи |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Решение Задачи к учебнику Ушаков,Юркова, Помогите с решением задачи |
Дмитрий Ильин |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Доброго времени суток,начал изучение Pascal неделю назад,были кое-где вопросы,где непонятки,где-то решал сам,где помогали соседи,интернет.
Но тут все гораздо сложнее* (!) смотрите вложение Урок 3.2. по задаче мы должны написать программу которая из 3 строчек,выберет несколько,определенно запрограммированных букв,затем по алфавиту поменять их на N количество в лево/право,НО^ !)нам надо ввести 3 строчки FINISHED OR PENDING? а уже в каждой из строчек выбрать первую букву,в другой строчке вторую букву,и ее уже редактировать(менять на 1-2 пункта влево/право по алфавиту) И в итоге таких манипуляций на выводе должно быть слово DONE 2) Пока что из книги,я могу менять только символы занесенные в переменную(Char),т.е. 1 символ,а тут целое слово,алгоритма деления слова на буквы,занесения каждой буквы в ячейку(это вроде дальше-массивы),и уже из массивов выдирать те символы что нам необходимы. Вопрос Так все таки как написать такую программу? Или все эти 3 строчки я не должен вводить в программу?(Readln(x1)) ? Не думаю что тут дойдет до массивов,т.к. я прошел только переменные,константы,умножение,деление,ост атки,и даже до условия(If else ) еще не дошёл ,как быть?Буду благодарен за ответы,надеюсь я не такой "непробиваемый" спасибо _______________________________________________________ * - возможно я немного не понял поставленной задачи Прикрепленные файлы 3.3.pdf ( 194.8 килобайт ) Кол-во скачиваний: 327 -------------------- Каждый программист - Творец (с)
|
potter-by |
Сообщение
#2
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Я так понимаю, что если просят ввести СТРОКИ, то нужно вводить СТРОКИ, а не массивы символов!
|
Дмитрий Ильин |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Это ответ?Я ВСЕ описал,а вы мне говорите про строки,да я же говорю что не знаю как записать эти строки а потом выбрать из них несколько букв отдельных! Читайте внимательно
-------------------- Каждый программист - Творец (с)
|
Дмитрий Ильин |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
И так....
Раз ответа я так и не получил,решил сделать все сам,но получилось довольно "Грубо"... задача была такая 1) Т.к. Отделять Буквы от слова программным методом я не умею еще,я сам записал эти буквы.и присвоих их к переменным типа char. 2) Узнал коды иэтих символов.с помощью команды a1:= Ord(a); 3) Мне необходимо были возвратить предществующий элемент(по 2 раза) относительно значений 1 и 3 буквы,а 2 и 4 оставить без изменения 4)певерести номера символов обратно в соответствующие символам в таблице слова,и 5) собственно вывести эти 4 буквы в порядке 1,2,3,4 что бы получилось слово и оно получилось Done Теперь код...Простите program n_3.3; uses crt; var a,b,c,d,e:integer; a_1,b_2,c_3,d_4,a_a,b_b,c_c,d_d:integer; a1,a2,a3,a4:Char; begin a1:='F'; a2:='O'; a3:='P'; a4:='E'; a:=Ord(a1); b:=ord(a2); c:=Ord(a3); d:=Ord(a4); a_1:=Pred(a);a:=Pred(A_1); b_2:=b; c_3:=Pred©; c:= Pred(c_3); d_4:=(d); a1:=chr(a);a2:=chr(b_2); a3:=chr©; a4:= chr(d_4); writeln('Слово', a1 ,a2 , a3, a4, 'Нажмите ENTER' ); readln(); writeln('Вроде получилось =) '); readln() end. _____________________________________ * смотрите вложение (PascalABC) Сообщение отредактировано: Дмитрий Ильин - Прикрепленные файлы 3.3.pas ( 480 байт ) Кол-во скачиваний: 285 -------------------- Каждый программист - Творец (с)
|
potter-by |
Сообщение
#5
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Работает, работает! Но где вы вводили строки? Несоблюдено условие задачи!
|
Дмитрий Ильин |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Работает, работает! Но где вы вводили строки? Несоблюдено условие задачи! Я вот одного не понимаю,я сюда пришел помощи просить,как сделать эту задачу,если до этого тем с отделением букв от вводимых с клавиатуры слов- НЕБЫЛО!!!! Если вы так категоричны относитесь к моему коду,который я составлял описарясь на знания,полученные из учебника,тогда напишите САМИ ЭТОТ КОД,не применяя массивов,операторов условия и т.д Мне интересно как вы это сделаете -------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Просто вам надо бы написать более мене доходчиво ваше задание.
Цитата Урок 3.2. по задаче мы должны написать программу которая из 3 строчек,выберет несколько,определенно запрограммированных букв,затем по алфавиту поменять их на N количество в лево/право,НО^ !)нам надо ввести 3 строчки FINISHED OR PENDING? а уже в каждой из строчек выбрать первую букву,в другой строчке вторую букву,и ее уже редактировать(менять на 1-2 пункта влево/право по алфавиту) И в итоге таких манипуляций на выводе должно быть слово DONE Я чесно пытался понять,что надо сделать,но понял лишь то,что у нас 3 строки , мы что то делаем с первой, второй и третьей..... Я вот хоть убей не понял,как из FINISHED OR PENDING можно получить слово DONE.Ну выбрали мы из каждой строчки FOP, что за другая строчка, ну допустим выбираем 2 букву ,будет либо I,либо O,либо E.Какими магическими действиями вы руководствовались, чтобы из 4 букв, из которых всего 2 вообще входят в DONE, чтобы получить результат.Почему именно первую и третью меняем??Это ваше умозаключение или конкретное задание? Так что не удивляйтесь,что вам не отвечают.То что вы сделали,это не работа с 3 строками а работа с 4 символами.....Так же не понятно, ваш пример с FINISHED OR PENDING DONE, это все что должна делать задача?Других возможных введенных строк быть не может? Или у нас строго фиксирован алгоритм замены букв? Сообщение отредактировано: Krjuger - |
IUnknown |
Сообщение
#8
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата тогда напишите САМИ ЭТОТ КОД,не применяя массивов,операторов условия и т.д Легко. Только для этого надо внимательно читать всё, что написано ВЫШЕ по тексту (в книге), чтоб знать, как происходит ввод данных. Если автор описал его на должном уровне, разумеется. А если не описал - то надо менять книгу...Мне интересно как вы это сделаете varМассивы есть? Нет. Операторы условия? Ни в коем виде. Строки вводятся? Вводятся. Результат получаем? Получаем. Где подвох? Сообщение отредактировано: IUnknown - |
Дмитрий Ильин |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Уважаемые форумчане,я письменно привел кратко,обрано что нам необходимо сделать,в каждом сообщении есть приписка(смотрите вложение*),в 1 вложении в ПДФ файле текст задачи,а точнее ксерокопия страницы учебника с ней,я не знаю куда вы смотрели,все материалы по задаче я выложил,включая свой вариант решения(хоть и просто букв
P.s.. Kjuger смотри вложение с пдф файлом в конце моего сообщения(1-вого). p.p.s сейчас проверю ваш код *спустя 30 секунд ,вау,честно сказать я не ожидал что все так просто.... А можете рассказать как так получилось что из всего слова(введенного),мы как то выбрали определенные буквы? просто в учебнике написано как менять символы,отдельно,про манипуляции со словом- нет ни заметки,поэтому я не могу так сделать,можете объяснить? Сообщение отредактировано: Дмитрий Ильин - -------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Вот здесь все кроется,да мы вводим строки,но нам глубоко плевать, какие символы в первой и второй строках идут после первого элемента,мы создаем 2 элемента типа char и записываем в них первую букву. readln(lett3, lett4); записываем в lett3 первую букву, а в lett4-вторую.....Почему так происходит...Так устроен readln, в книжке должно быть написано,как с ним работать, если не написано,то гугл знает, описания стандартных функций много в интернетах. Сообщение отредактировано: Krjuger - |
Дмитрий Ильин |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
ок,вот еще пара вопросов
1)А если мне нужно 6 символ от слова?6тую букву из слова,мне придется прописывать a,b,c,d,e,f6:char; Readln(a,b,c,d,e,f6); и только потом использовать мой f6 символ? 2) эту тему я понял,перешел к булевым выражениям,встал на задаче 4.1 вот собственно задача Задание 4.1. Определите в программе 4 логических переменных, которые содержат следующую информацию о людях: Married — «истина», если человек женат (замужем), Blond — «истина», если у человека светлые волосы, Male — «истина», если человек — мужчина, Employed — «истина», если человек работает. Составьте логические выражения, с помощью которых можно определить, является ли человек: 1) замужней женщиной; 2) неженатым мужчиной; 3) незамужней блондинкой; 4) безработной незамужней женщиной; 5) либо неженатым, либо безработным, либо и тем и другим. у меня получается только два первых действия,а код занимает уже весь экран Код program qu_1; uses crt; var Married,Blond,Male,Employed:boolean; a1,b1,c1,d1:boolean; a,b,c,d:char; begin Married:=True; Blond:=True; Male:=True; Employed:=True; writeln('Вы замуженяя ?[y/n]'); Readln(a); Married:= a = 'y'; writeln(Married); Writeln('Вы неженаты?[y/n]'); readln(b); writeln('Вы мужчина?[y/n]'); readln(c); Married:= b = 'y'; male:= c = 'y'; a1:=married and male; Writeln('вы неженатый мужчина? ответ: ',a1); end. и это только 2 действия,да и нелогично + надо как-то код упростить,а я немного не понимаю -как.Поможете? -------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
ЭМ вообще то для этого надо создавать новые темы,а не делать свалку из одной, затем, чем можно пользоваться? Условиями можно?Во вторых, у вас неправильный принцип построения программы, сначала вы должны получить все 4 параметра о человеке, а уж потом начать проверять.
Твоя же работа,только доведенная,но я не проверил, все возможные варианты,так что проверь,если что то не сработает,говори,но вроде все должно быть норм. |
IUnknown |
Сообщение
#13
|
Гуру Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Krjuger
Цитата a3:= not Married and Blond; |
Дмитрий Ильин |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
кажется я понял
1) мы должны спросить у пользователя несколько вопросов(Мужчина ли он,Блондин ли он,работает/неработает)\ 2)получив ответы на вопросы,мы заносим их в переменные 3)оперируя(всмысле используя) полученные ответы мы с помощью логических операций выводим правильные ответы в порядке 1) 2) 3) 4) 5) ?(а я вообще делал по 1 вопросу...) Прошу прощенья за "свалку тем",просто если я каждый раз буду создавать тему,то.....ни к чему хорошему это не приведет,а тут в заголовке написано- "Помогите решить зачаду (Учебник Ушаков и Юрьева)" Надеюсь на понимание и спасибо за код,сейчас буду разбирать. -------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#15
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Чорт, да чето я опростоволосился.
Насчет второго,я понимаю,но у него 5 пункт хвучит так, ну и я решил не минимизировать,а сделать дословно. Сообщение отредактировано: Krjuger - |
Дмитрий Ильин |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Все равно,булеан и условия If для меня(для понимания) сложноваты,может есть какой нибудь вариант где можно потренероваться,поднатянуться для понимания?Буду благодарен
-------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#17
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Для понимания нет,просто решай задачи,пробуй, просто не надо спешить, если уж совсем не способен осознать, принимай на веру,в последствии с опытом переосмыслиш(но осоно не злоупотребляй этим)
Если пояснить то булеан хранит либо True,либо False, так же в некоторых источниках может быть правда,ложь или 0 , 1. Этот тип собственно отображает результат любых логических операций.А теперь на примере. Married:= a = 'y'; У нас есть переменная a,мы сравниваем ее 'y'и записываем результат в переменную Married, у нас 2 варианта,либо а='y' ,тогда Merried будет True, либо Merried будет False, если а не равно 'y'. Аналогично a3:= not Married and Blond and not Male; Сообщение отредактировано: Krjuger - |
Дмитрий Ильин |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
как раз вот это я и понимаю )) Married:= a = 'y';
а вот a3:= not Married and Blond and not Male; это уже сложно,плюс я не понимаю зачем изначально в программе прописывать 4 переменные которые имеют ответ=True,если в последствии мы можем повлиять на их значение Male:= True writeln('Мужчина?');readln(a); Потом мы сравниваем переменную(которая зараннее уже положительна,т.е. True), male:= a = 'y'; вот этого не пойму ( перерыскал YouTube там только основы,т.е. элементарные уравнения типа X>3,а задачек с решениями нет,из одноклассников,или хотя бы паралели никто не учит паскаль,дельфи,с. Да и думаю что Boolean Во всех языках есть,так что пропускать его,это очень плохо в будушем,хотя может со временем мозги "встанут" на нужное место,при дальнейшей учебе паскаля -------------------- Каждый программист - Творец (с)
|
Krjuger |
Сообщение
#19
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Это одно из правил нормального программирования,все переменные инициализируются(создаются если попроще) с начальным значением.Дело в том,что некоторые языки требуют обязательно инициализировать,некоторые нет.Паскаль среди вторых.По сути если самому не инициализировать,то паскаль по дефолту чаще всего ставит нуль,но это не может нам гарантировать,что на 100500ом запуске программы он не запишет вместо нуля какую нибудь другую информацию.Поэтому признаком грамотной программы,пусть даже этого не требует среда, все равно будет их инициализация.
Смотри здесь уже чистая логика.В Married храниться женат ли человек, если человек не женат, то в Married будет 0(ложь), not Married вернет нам отрицание 0 тобишь 1(мы же ищем именно неженатого человека).А полная суть этой строчки заключается в том,что если not Married, Blond, not Male все будут единицами(правдой),то мы получим в а3 единицу,тобиш истину, если будет хотябы 1 ноль,тобиш ложь,то это будет означать что одно из условий не выполняеться и значит данный человек не подходит под описание и в а3 попадет ноль.Я думаю таких вещей,как Математическая логика, или Алгебра логики, вы не знаете, поэтому пояснять коментарий IUnknown про минимизацию для ответа на 5 вопрос я не стану. Сообщение отредактировано: Krjuger - |
Дмитрий Ильин |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
(not Married or not Employed).
На сколько я знаю not - имеет наивысший приорите,and - средний , Or и xor(отрицание)-наименьший,ведь так? Исходя из этого ,мы получаем по действиям 1)Не замужем 2) не рабочий 3) или 4 не замужем ИЛИ НЕ РАБОТАЕТ,причем логическое ИЛИ будет зависеть от операндов 1 и 2 True + true = True True +false = TRUE FALSE + TRUE = TRUE FALSE +FALSE = FALSE Получается Если МЫ Замужем и работаем то выводится ...FALSE + FALSE = FAlse? вот тут я и путаюсь) А так спасибо) расжевали) Сообщение отредактировано: Дмитрий Ильин - -------------------- Каждый программист - Творец (с)
|
Текстовая версия | 23.12.2024 20:11 |