Страница 2 из 8
Re: Объясните новичку.
Добавлено: 22.03.2011 22:06:57
Paster Fob
ну вот к примеру прочитал про оператор Case и пробую сделать задание без учебника.
Код: Выделить всё
var a:integer;
begin
repeat
readln(a);
if a=0 then break;
case a of
1:writeln('Первый');
2:writeln('Второй');
3:writeln('Третий');
4:writeln('Четвёртый');
5:writeln('Пятый');
end;
until false;
readln;
end.
вот и не знаю как правильно написать то ли 1:=writeln...,то ли 1=writeln...Попробовал ,в результате ошибки,пока не написал 1:writeln.Вот мне и нужно понять какой знак когда ставится,что бы не перебирать их поочереди.
Re: Объясните новичку.
Добавлено: 22.03.2011 22:14:38
Mr.Smart
Конструкции языка нужно знать, а не гадать на кофейной гуще...
Re: Объясните новичку.
Добавлено: 22.03.2011 22:20:53
Maxizar
Это никак не связано с операторами типа присвоить (:=) или оператор проверки равенства (=), Это правила оператора выбора case:
Чтобы таких вопросов не возникало, можно прочитать любую книгу по делфи или Free Pascal, бесплатную можно скачать например вот эту:
Основы программирования в среде Lazarus
Автор: К.Т.Мансуров
Можно взять на сайте в разделе книги...
Например в ней оператор выбора описан на стр. 124.
Просто нужно хотябы раз, где описаны основы синтаксиса все же прочитать, иначе у вас будут вопросы, ответы на которые будут иметь такой вид:
Прочитайте на стр 124, на второй вопрос стр 125 и т.д. Не ответить, плохо, но отвечать в таком духе, просто рано или поздно вам просто перестанут это делать как скажем перестали dangreen-у....
Re: Объясните новичку.
Добавлено: 22.03.2011 22:28:54
Paster Fob
Я читал в других книжках только там всё на заумном,а мне нужно по-простому.А книгу я ещё днём скачал.Бегло просмотрел.Завтра почитаю.Спасибо за совет.
Re: Объясните новичку.
Добавлено: 24.03.2011 07:48:00
Азотирование
Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель
Re: Объясните новичку.
Добавлено: 24.03.2011 10:35:55
Mr.Smart
Азотирование писал(а):Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель
А вы знаете, что за работу Учителя нужно платить?! Ах да на пост советском пространстве это не принято...
Re: Объясните новичку.
Добавлено: 24.03.2011 11:59:28
Vadim
Paster Fob писал(а):Вот мне и нужно понять какой знак когда ставится,что бы не перебирать их поочереди.
Всё смешалось в доме Обломских: люди, кони...

Вот это как раз пример по Вашему вопросу.

У каждого языка есть свой синтаксис. Язык программирования здесь не исключение. Паскаль - не Си и создавался он более-менее человекообразным, поэтому к нему нужно применять те критерии правильности синтаксиса, которые Вы применяете к Вашему языку общения. А точнее - к английскому. Давайте перейдём к английскому словарю, чтобы было понятнее:
Case - выбор значения
of - из
а далее, всё как в том примере, что я Вам привёл выше - Вы задаёте значение "дом Обломских", далее следует двоеточие, т.к. Вам нужно отделить значение от зависимых от этого значения действий или данных. Заметьте, всё как в обычном языке. В обычном языке двоеточие служит символом-разделителем и в Паскале двоеточие тоже служит символом-разделителем между каким-то данным и зависимыми от него обстоятельствами.
Re: Объясните новичку.
Добавлено: 01.04.2011 18:31:45
Paster Fob
Азотирование писал(а):Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель
Значит далее изучил я цикл со счётчиком
for...
to...
do и тут же задание:Напишите программу, которая, запросив число N, печатала бы числа от 1 до N в обратном порядке,например:
n = 3
3
2
1
Я долго ломал голову как это сделать,но так и не догадался,в ответах вот что увидел:
Код: Выделить всё
var n,i:integer;
begin
write('n = ');
readln(n);
for i:=1 to n do writeln(n+1-i);
readln
end.
Так я и не смог понять принципа работы этой программы,почему цифры на экране появились в обратном порядке?
Re: Объясните новичку.
Добавлено: 01.04.2011 18:48:05
Little_Roo
Paster Fob писал(а):Значит далее изучил я цикл со счётчиком for...to...do
Может придется (но это ведь так сложно

) поизучать далее...
или прочитать где-нибудь (в любом учебнике по Паскалю) про
downtoНо по уровню задачи - в каком классе Вы,
Paster Fob , а ???
Re: Объясните новичку.
Добавлено: 01.04.2011 19:03:35
Paster Fob
или прочитать где-нибудь (в любом учебнике по Паскалю) про downto
Я маленько не дописал,было предложено выполнить задание в 2-ух вариантах с помощью downto и так как выше я писал.Так вот вариант с downto я решил сам,а вот тот про который я расписал выше не смог,вот и объясните мне как так вышло?В книге примеров почти нет.А как я должен учиться?
по уровню задачи - в каком классе Вы, Paster Fob , а ???
какой нафиг класс,я школу в 1999 году закончил.Мне 28 лет.
Re: Объясните новичку.
Добавлено: 02.04.2011 04:13:44
Vadim
Paster Fob писал(а):Так я и не смог понять принципа работы этой программы,почему цифры на экране появились в обратном порядке?
Действительно, если распишете на бумажке получающиеся в цикле цифры, то поймёте запросто.

К примеру, Вы ввели n:=5. Теперь смотрим, какие цифры в резцльтате получаются:
WriteLn(5+1-1); //5
WriteLn(5+1-2); //4
WriteLn(5+1-3); //3
WriteLn(5+1-4); //2
WriteLn(5+1-5); //1
Re: Объясните новичку.
Добавлено: 02.04.2011 07:07:27
informat
Paster Fob писал(а):ну вот к примеру прочитал про оператор Case и пробую сделать задание без учебника.
Код: Выделить всё
var a:integer;
begin
repeat
readln(a);
if a=0 then break;
case a of
1:writeln('Первый');
2:writeln('Второй');
3:writeln('Третий');
4:writeln('Четвёртый');
5:writeln('Пятый');
end;
until false;
readln;
end.
вот и не знаю как правильно написать то ли 1:=writeln...,то ли 1=writeln...Попробовал ,в результате ошибки,пока не написал 1:writeln.Вот мне и нужно понять какой знак когда ставится,что бы не перебирать их поочереди.
Я вижу тут проблему хуже.
Стиль, которым написана эта программа, переведёт автора к серьёзным проблемам для больших кодах.
Бесконечный цикл их которого выпрыгивают "на ходу" преведёт к плохо понимаемому коду!
Что мешает написать так:
Код: Выделить всё
var a:integer;
begin
repeat
readln(a);
case a of
1:writeln('Первый');
2:writeln('Второй');
3:writeln('Третий');
4:writeln('Четвёртый');
5:writeln('Пятый');
end;
until a=0;
readln;
end.
?
Re: Объясните новичку.
Добавлено: 02.05.2011 22:27:26
Paster Fob
Всем привет.дошёл я до процедур и мой мозг вскипел.Значит так на примере этой программы показана работа с отладчиком,как находить ошибки.Задание такое,ввести 3 строки и поменять в них буквы A на b.Внутри процедуры всё работает,после выхода из неё программа работает не правильно.Но дело не в этом.Мне не понятно как в параметр arg попала переменная s?Объясните пожалуйста.
Код: Выделить всё
var s:string;
k:integer;
procedure Scan(arg:string);
var k:integer;
begin
for k:=1 to length(arg) do
if arg[k]='a' then arg[k]:='b';
end;
begin
for k:=1 to 3 do begin
write('Введите строку: ');
readln(s);
Scan(s);
writeln(s);
end;
end.
Re: Объясните новичку.
Добавлено: 02.05.2011 23:06:24
Padre_Mortius
Мне не понятно как в параметр arg попала переменная s
Вы сами ее передаете как аргумент процедуры вот этим вызовом процедуры
Re: Объясните новичку.
Добавлено: 03.05.2011 10:00:41
Putnick
Уважаемый Paster Fob, предполагая Ваше дальнейшее затруднение с тем, что
Paster Fob писал(а):Внутри процедуры всё работает,после выхода из неё программа работает не правильно.
, спешу Вас уведомить, что в Паскале у процедуры есть как параметры-
значения, так и параметры-
переменные. Последние в описании процедуры оформляются с использованием ключевого слова
var. Таким образом, если Вы замените строку
на
, то программа начнет работать правильно.
С уважением, Алексей.