Четверг, 28 Мая 2020, 05:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Помогите с доработкой программы
Помогите с доработкой программы
NikstounДата: Понедельник, 23 Ноября 2015, 20:46 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Приветствую всех ! Есть простенькая программа .

-----------------------------------------

Код
var
b:integer;
a:string;
pon:='понедельник';
vt:='вторник';
sr:='среда';
ch:='четверг';
pya:='пятница';
subb:='суббота';
voskr:='воскресенье';
//Выводится случайное число от 1 до 7 , пользователь должен написать
//название дня недели соответствующий цифре , все это зациклено
begin
write ('Вы увидите число , напишите название дня недели ');
writeln ('соответствующее этому числу ');
b:=random(1,7);
Writeln ('День номер ', b);
Write ('Это ');
Read (a);
if b=1
then
begin
if a=pon then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это понедельник !');
if b=2
then
begin
if a=vt then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это вторник !');
if b=3
then
begin
if a=sr then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это среда !');
if b=4
then
begin
if a=ch then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это четверг !');
if b=5
then
begin
if a=pya then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это пятница !');
if b=6
then
begin
if a=subb then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это суббота !');
if b=7
then
begin
if a=voskr then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это воскресенье !');
end.

-------------------------------------------------

Вот в чем проблема , кроме вывода "вы правы" выводится еще и 6 "вы не правы" , в чем ошибка ?
P.S. Как видите , пока что тут нет циклов , будут в будущем .


Сообщение отредактировал Nikstoun - Понедельник, 23 Ноября 2015, 20:53
Sasha7b9Дата: Понедельник, 23 Ноября 2015, 20:57 | Сообщение # 2
был не раз
Сейчас нет на сайте
Э, так читать - все глаза поломать можно.
Я бы на твоём месте проявил сочувствие к читающим и отформатировал текст.


Танкист МК
martukДата: Понедельник, 23 Ноября 2015, 21:22 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Все очень просто!) "Вы не правы" выводится уже от других условий! Используй кейсы! Никаких циклов в будущем не нужно!

Добавлено (23 ноября 2015, 21:20)
---------------------------------------------
Цитата Nikstoun ()
в чем ошибка ?
И кстати в коде нет ошибок. Он делает так как ты ему сказал!
Разжую сейчас!

Допустим тебе выелось 1 и ты написал pon, то он конечно сравнил в первом условии и выдал "вы правы!", все хорошо но ты забыл о следующих проверках.
Следующая проверка не прошла, и она конечно выкинула "Вы не правы!" и так 6 раз.

Чтобы обойти это:

1. Использую вложенное условие (хотя не рекомендуется) Например:

Код
if b=1 then begin
if a=pon then Writeln ('Вы правы !');
end else begin
writeln ('Вы не правы ! Это понедельник !');

//Если 1 условие не прошло, то проверяем второе
if b=2 then begin
if a=vt then Writeln ('Вы правы !');
end else begin
writeln ('Вы не правы ! Это Вторник!');
//И здесь начинай так же проверять среду
end
end


2. Используй кейсы!) А то слишком много ифоф. Грузить будет процессор)


Сообщение отредактировал martuk - Понедельник, 23 Ноября 2015, 21:27
NikstounДата: Понедельник, 23 Ноября 2015, 21:29 | Сообщение # 4
почетный гость
Сейчас нет на сайте
martuk, спасибо за подсказки , но вот в чем проблема . Я и так использовал вложенные условия , если внимательно присмотреться то можно увидеть их !

--------------------

Код
if b=1
then
begin
if a=pon then Writeln ('Вы правы !');
end
Else writeln ('Вы не правы ! Это понедельник !');

if b=1 then begin
if a=pon then Writeln ('Вы правы !');
end else begin

writeln ('Вы не правы ! Это понедельник !');

p.s. одно и то же)
-----------------------------------------------

Расскажи о кейсах (или дай ссылку на изучению оного) .
martukДата: Понедельник, 23 Ноября 2015, 21:37 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата Sasha7b9 ()
Я бы на твоём месте проявил сочувствие к читающим и отформатировал текст.

Сайт почему то убирает пробелы...

Ну вот, так может понятней
Код

>[color=blue]if[/color] b=1 [color=blue]then[/color][color=blue]begin[/color]
>___[color=blue]if[/color] a=pon [color=blue]then[/color] Writeln ([color=purple]'Вы правы !'[/color]);
>[color=blue]end else begin[/color]
>___writeln ([color=purple]'Вы не правы ! Это понедельник !'[/color]);

>___[color=green]//Если 1 условие не прошло, то проверяем второе[/color]
>___[color=blue]if[/color] b=2 t[color=blue]hen begin[/color]
>______if a=vt [color=blue]then[/color] Writeln ([color=purple]'Вы правы !'[/color]);
>___[color=blue]end else begin[/color]
>______writeln ([color=purple]'Вы не правы ! Это Вторник!'[/color]);
>______[color=green]//И здесь начинай так же проверять среду[/color]
>___[color=blue]end[/color]
>[color=blue]end[/color]

Добавлено (23 ноября 2015, 21:37)
---------------------------------------------
Цитата Nikstoun ()
Я и так использовал вложенные условия

Ага, ты использовал внутри каждой проверки цифр. А собственно нужно, чтобы следующая проверка осуществлялась внутри else предыдущей проверки.

Опа. Я своем коде ошибся, погоди секунду


Сообщение отредактировал martuk - Понедельник, 23 Ноября 2015, 21:34
NikstounДата: Понедельник, 23 Ноября 2015, 21:39 | Сообщение # 6
почетный гость
Сейчас нет на сайте
martuk, я понял в чем проблема !
У меня есть 2 if при 1 цифре . 1 if проверяет равно ли b числу , а 2 if проверяет равно ли a переменной ... Дак вот , суть в том , что при 2 if есть всего-лишь 1 else ! И это else относится к 1 if , то есть если b не равно 1 , то действие не просто пропускается , а запускается else , при котором пишется , что мы не правы ! Как это исправить ?

----------------------------

И да , я сначала написал , а потом прочитал твой коммент )


Сообщение отредактировал Nikstoun - Понедельник, 23 Ноября 2015, 21:40
martukДата: Понедельник, 23 Ноября 2015, 21:53 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Сейчас напишу рабочий вид

Добавлено (23 ноября 2015, 21:45)
---------------------------------------------
Код
var nedelya:array[1..7] of string;
var i:integer;
var a:string;

nedelya[1] := pon;
nedelya[2] := vt;
nedelya[3] := sr;
nedelya[4] := ch;
nedelya[5] := pya;
nedelya[6] := subb;
nedelya[7] := voskr;

begin

i:=random(1,7);
Writeln ('День номер ', i);
Write ('Это ');
Read (a);

if nedelya[i] = a then begin
ShowMessage('Вы правы')
end else begin
ShowMessage('Вы не правы! это '+nedelya[i])
end

end

Добавлено (23 ноября 2015, 21:47)
---------------------------------------------
А может и не рабочий, я без среды. Так пишу)
Подправь мелкие ошибки) И запусти. Это куда легче чем париться с ифами

Добавлено (23 ноября 2015, 21:53)
---------------------------------------------
Знаешь что, я тут посмотрел, и мой предыдущий код вполне рабочий, только надо ответ "не верно" нужно перенести в else проверки написанного слова.


Сообщение отредактировал martuk - Понедельник, 23 Ноября 2015, 22:17
NikstounДата: Понедельник, 23 Ноября 2015, 23:13 | Сообщение # 8
почетный гость
Сейчас нет на сайте
martuk, вообщем немного поразмыслив , просмотрев то , что ты мне скинул , я пришел к этому !

---------------------

Код
var
b:integer;
a:string;
pon:='понедельник';
vt:='вторник';
sr:='среда';
ch:='четверг';
pya:='пятница';
subb:='суббота';
voskr:='воскресенье';
//Выводится случайное число от 1 до 7 , пользователь должен написать
//название дня недели соответствующий цифре , все это зациклено
begin
write ('Вы увидите число , напишите название дня недели ');
writeln ('соответствующее этому числу ');
b:=random(1,7);
Writeln ('День номер ', b);
Write ('Это ');
Read (a);
if b=1
then
begin
if a=pon then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это понедельник !');
end;
if b=2
then
begin
if a=vt then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это вторник !');
end;
if b=3
then
begin
if a=sr then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это среда !');
end;
if b=4
then
begin
if a=ch then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это четверг !');
end;
if b=5
then
begin
if a=pya then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это пятница !');
end;
if b=6
then
begin
if a=subb then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это суббота !');
end;
if b=7
then
begin
if a=voskr then Writeln ('Вы правы !')
Else writeln ('Вы не правы ! Это воскресенье !');
end;
end.

---------------------------

Все работает так как нужно , с циклами пока не морочался , а это вполне рабочий вариант на 1 число . Спасибо за помощь ! (Лови +1)
martukДата: Понедельник, 23 Ноября 2015, 23:59 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Модератор, спс) но только не надо было заключать в код подсветку!
Nikstoun, зачем цикл то? Используй кейсы на выбор числа. Или тот мой последний вариант.
NikstounДата: Вторник, 24 Ноября 2015, 14:58 | Сообщение # 10
почетный гость
Сейчас нет на сайте
martuk, слушай , расскажи как можно засунуть целую кучу строк ( в данном случае выбор числа и последующее его написание ) под 1 переменную , или что-то одиночное , что будет содержать эти строки ? Чтобы обойтись без копипаста и засорения пространства )

Мне посоветовали НАПИСАТЬ процедуру или функцию , это как ?


Сообщение отредактировал Nikstoun - Вторник, 24 Ноября 2015, 15:19
martukДата: Вторник, 24 Ноября 2015, 16:10 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Нужно создать функцию, а затем вызывать ее из любого места твоей программы. Найди в гугле.
GudleifrДата: Четверг, 26 Ноября 2015, 22:15 | Сообщение # 12
почти ветеран
Сейчас нет на сайте
Цитата Nikstoun ()
Помогите...
Помочь тут можно только парадоксальным советом: забейте на простые задачки и переходите к сложным. Дело в том, что старые пердуны-задачкотворцы думают, что Вы, как умная Маша, пойдете от простого к сложному: напишете что-то вроде "СОЗДАТЬ-НАБОР-ОБЪЕКТОВ, СЛУЧАЙНО-ВЫБРАТЬ-ОДИН, ВЫВЕСТИ-ОДИН-ИЗ-ЕГО-ПАРАМЕТРОВ, ЗАПРОСИТЬ-ДРУГОЙ-ПАРАМЕТР, ПРОВЕРИТЬ-СООТВЕТСТВИЕ-ПАРАМЕТРОВ", а затем честно будете переводить это с человеческого языка на язык программирования. Но, ведь, для перевода с языка на язык надо знать "некоторые принципы"... Но откуда их взять? Если, Вы, как и почти все "современные программисты" идете по пути "заучивания мелких частностей"? И Ваши способности "программиста" будут ограничены объемами Вашей памяти. Так что, не грузите "мусор", читайте, переписывайте и запоминайте большие работающие программы. Так сейчас делает подавляющее большинство коммерчески успешных программистов. Даже учебники сейчас так пишут. Например, официальные толкования даже по таким замухрышкам, как Perl или Tcl/Tk, весят по 1000 страниц. Вычленить из них "суть" невозможно в принципе...


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
NikstounДата: Суббота, 28 Ноября 2015, 22:24 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Gudleifr, то есть , не нужно усваивать основы , а сразу нужно "набивать" навык , переписывая готовые более сложные программы ? Странно ...
GudleifrДата: Суббота, 28 Ноября 2015, 23:13 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Цитата Nikstoun ()
сразу нужно "набивать" навык
Скорее, усваивать методом погружения. Как обычный иностранный язык.
Цитата Nikstoun ()
не нужно усваивать основы
Нужно. Но где Вы их возьмете?
Для примера примерно перечислю концепции, которые у программиста пролетают в голове даже в таком элементарном случае:
СОЗДАТЬ-НАБОР-ОБЪЕКТОВ - нужно множество поддерживающее операции ВСТАВИТЬ и ПРИНАДЛЕЖАТЬ. К счастью, оно счетное, т.е. элементы можно пронумеровать, и маленькое, можно хранить элементы подряд. В принципе, если бы оно было чуть посложнее, пришлось бы использовать таблицу расстановки. И еще крупно повезло, что нам достаточно выбрать только один элемент (если бы их было несколько, вместо массива пришлось бы использовать список, поддерживающий операцию УДАЛИТЬ). Кстати, есть языки в которых обычных массивов нет.
СЛУЧАЙНО-ВЫБРАТЬ-ОДИН - т.к. у нас простой массив, достаточно одного случайного числа. Если бы надо было бы выбрать несколько, возможно, было бы перетасовать список и брать подряд. А если бы количество элементов в множестве было бы неизвестно заранее, пришлось бы получать случайное число для каждого.
И т.д., и т.п...
Обратите внимание, что после ВЫБОРА само множество нам более не нужно, достаточно оставить только ПАРАМЕТРЫ выбранного...

В принципе, раньше все эти "основы" давали раньше, чем пускали за компьютеры... А сейчас вероятнее подсмотреть в чужих программах.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Воскресенье, 29 Ноября 2015, 15:55
XakepДата: Суббота, 28 Ноября 2015, 23:23 | Сообщение # 15
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата martuk ()
2. Используй кейсы!) А то слишком много ифоф. Грузить будет процессор)

Процессор прям перегреется и сгорит от стольких ифоф :D
Цитата martuk ()
Сайт почему то убирает пробелы...

лучше используйте тогда gist или pastebin и ссылку на код давайте, а то так вообще ужас же, ни отступов ни подсветки.


Сообщение отредактировал Xakep - Суббота, 28 Ноября 2015, 23:25
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Помогите с доработкой программы
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2020 Рейтинг