IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Решение Задачи к учебнику Ушаков,Юркова, Помогите с решением задачи
сообщение
Сообщение #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 килобайт ) Кол-во скачиваний: 299


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Я так понимаю, что если просят ввести СТРОКИ, то нужно вводить СТРОКИ, а не массивы символов!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Это ответ?Я ВСЕ описал,а вы мне говорите про строки,да я же говорю что не знаю как записать эти строки а потом выбрать из них несколько букв отдельных! Читайте внимательно


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


И так....
Раз ответа я так и не получил,решил сделать все сам,но получилось довольно "Грубо"...
задача была такая
1) Т.к. Отделять Буквы от слова программным методом я не умею еще,я сам записал эти буквы.и присвоих их к переменным типа char.
2) Узнал коды иэтих символов.с помощью команды a1:= Ord(a);
3) Мне необходимо были возвратить предществующий элемент(по 2 раза) относительно значений 1 и 3 буквы,а 2 и 4 оставить без изменения
4)певерести номера символов обратно в соответствующие символам в таблице слова,и
5) собственно вывести эти 4 буквы в порядке 1,2,3,4 что бы получилось слово и оно получилось
Done

Теперь код...Простите rolleyes.gif

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 байт ) Кол-во скачиваний: 256


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Работает, работает! Но где вы вводили строки? Несоблюдено условие задачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Цитата(potter-by @ 10.12.2011 10:08) *

Работает, работает! Но где вы вводили строки? Несоблюдено условие задачи!


Я вот одного не понимаю,я сюда пришел помощи просить,как сделать эту задачу,если до этого тем с отделением букв от вводимых с клавиатуры слов- НЕБЫЛО!!!!
Если вы так категоричны относитесь к моему коду,который я составлял описарясь на знания,полученные из учебника,тогда напишите САМИ ЭТОТ КОД,не применяя массивов,операторов условия и т.д
Мне интересно как вы это сделаете


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
тогда напишите САМИ ЭТОТ КОД,не применяя массивов,операторов условия и т.д
Мне интересно как вы это сделаете
Легко. Только для этого надо внимательно читать всё, что написано ВЫШЕ по тексту (в книге), чтоб знать, как происходит ввод данных. Если автор описал его на должном уровне, разумеется. А если не описал - то надо менять книгу...

var
lett1 : char;
lett2 : char;
lett3 : char;
lett4 : char;
begin
readln(lett1);
readln(lett2);
readln(lett3, lett4);

lett1 := pred(pred(lett1));
lett3 := pred(pred(lett3));
writeln(lett1, lett2, lett3, lett4);
end.
Массивы есть? Нет. Операторы условия? Ни в коем виде. Строки вводятся? Вводятся. Результат получаем? Получаем. Где подвох?

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Уважаемые форумчане,я письменно привел кратко,обрано что нам необходимо сделать,в каждом сообщении есть приписка(смотрите вложение*),в 1 вложении в ПДФ файле текст задачи,а точнее ксерокопия страницы учебника с ней,я не знаю куда вы смотрели,все материалы по задаче я выложил,включая свой вариант решения(хоть и просто букв
P.s.. Kjuger смотри вложение с пдф файлом в конце моего сообщения(1-вого).
p.p.s сейчас проверю ваш код

*спустя 30 секунд blink.gif ,вау,честно сказать я не ожидал что все так просто....
А можете рассказать как так получилось что из всего слова(введенного),мы как то выбрали определенные буквы?
просто в учебнике написано как менять символы,отдельно,про манипуляции со словом- нет ни заметки,поэтому я не могу так сделать,можете объяснить?

Сообщение отредактировано: Дмитрий Ильин -


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +



readln(lett1);
readln(lett2);
readln(lett3, lett4);


Вот здесь все кроется,да мы вводим строки,но нам глубоко плевать, какие символы в первой и второй строках идут после первого элемента,мы создаем 2 элемента типа char и записываем в них первую букву.
readln(lett3, lett4); записываем в lett3 первую букву, а в lett4-вторую.....Почему так происходит...Так устроен readln, в книжке должно быть написано,как с ним работать, если не написано,то гугл знает, описания стандартных функций много в интернетах.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 действия,да и нелогично + надо как-то код упростить,а я немного не понимаю -как.Поможете?


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


ЭМ вообще то для этого надо создавать новые темы,а не делать свалку из одной, затем, чем можно пользоваться? Условиями можно?Во вторых, у вас неправильный принцип построения программы, сначала вы должны получить все 4 параметра о человеке, а уж потом начать проверять.

program qu_1;
uses crt;
var
Married,Blond,Male,Employed:boolean;
a1,a2,a3,a4,a5:boolean;
a,b,c,d:char;
begin
Married:=True;
Blond:=True;
Male:=True;
Employed:=True;
writeln('Married?я ?[y/n]');
Readln(a);
Married:= a = 'y';
writeln(Married);
Writeln('Blond?[y/n]');
readln(b);
Blond:= b = 'y';
writeln('Male?[y/n]');
readln©;
Male:= c = 'y';
writeln('Employed?[y/n]');
readln(d);
Employed:=d='y';
a1:= Married and not male;
Writeln('Married women: ',a1);
a2:= not Married and male;
Writeln('Not married men: ',a2);
a3:= not Married and Blond;
Writeln('Not Married Blond: ',a3);
a4:= Not Employed and not Married and not male;
Writeln('Not Work Not Married women: ',a4);
a5:= (Not Married and not Employed) or Not Married or not Employed;
Writeln('Number 5: ',a5);
readln;
end.


Твоя же работа,только доведенная,но я не проверил, все возможные варианты,так что проверь,если что то не сработает,говори,но вроде все должно быть норм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Krjuger
Цитата
a3:= not Married and Blond;
- это неженатый блондин или незамужняя блондинка. В задании явно сказано, что нужна особа женского пола. А в условии A5 первая часть (то, что в скобках) явно лишняя. Минимизируй выражение - получишь (not Married or not Employed).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


кажется я понял
1) мы должны спросить у пользователя несколько вопросов(Мужчина ли он,Блондин ли он,работает/неработает)\
2)получив ответы на вопросы,мы заносим их в переменные
3)оперируя(всмысле используя) полученные ответы мы с помощью логических операций выводим правильные ответы в порядке 1) 2) 3) 4) 5) ?(а я вообще делал по 1 вопросу...)

Прошу прощенья за "свалку тем",просто если я каждый раз буду создавать тему,то.....ни к чему хорошему это не приведет,а тут в заголовке написано- "Помогите решить зачаду (Учебник Ушаков и Юрьева)"
Надеюсь на понимание и спасибо за код,сейчас буду разбирать.


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Чорт, да чето я опростоволосился.

a3:= not Married and Blond and not Male;
Writeln('Not Married Blond women: ',a3);


Насчет второго,я понимаю,но у него 5 пункт хвучит так, ну и я решил не минимизировать,а сделать дословно.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Все равно,булеан и условия If для меня(для понимания) сложноваты,может есть какой нибудь вариант где можно потренероваться,поднатянуться для понимания?Буду благодарен


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 Во всех языках есть,так что пропускать его,это очень плохо в будушем,хотя может со временем мозги "встанут" на нужное место,при дальнейшей учебе паскаля


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Это одно из правил нормального программирования,все переменные инициализируются(создаются если попроще) с начальным значением.Дело в том,что некоторые языки требуют обязательно инициализировать,некоторые нет.Паскаль среди вторых.По сути если самому не инициализировать,то паскаль по дефолту чаще всего ставит нуль,но это не может нам гарантировать,что на 100500ом запуске программы он не запишет вместо нуля какую нибудь другую информацию.Поэтому признаком грамотной программы,пусть даже этого не требует среда, все равно будет их инициализация.

а вот a3:= not Married and Blond and not Male;

Смотри здесь уже чистая логика.В Married храниться женат ли человек, если человек не женат, то в Married будет 0(ложь), not Married вернет нам отрицание 0 тобишь 1(мы же ищем именно неженатого человека).А полная суть этой строчки заключается в том,что если not Married, Blond, not Male все будут единицами(правдой),то мы получим в а3 единицу,тобиш истину, если будет хотябы 1 ноль,тобиш ложь,то это будет означать что одно из условий не выполняеться и значит данный человек не подходит под описание и в а3 попадет ноль.Я думаю таких вещей,как Математическая логика, или Алгебра логики, вы не знаете, поэтому пояснять коментарий IUnknown про минимизацию для ответа на 5 вопрос я не стану.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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?
вот тут я и путаюсь)
А так спасибо) расжевали)

Сообщение отредактировано: Дмитрий Ильин -


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 17:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name