Объясните новичку.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Re: Объясните новичку.

Сообщение Paster Fob » 22.03.2011 23:06:57

ну вот к примеру прочитал про оператор 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.Вот мне и нужно понять какой знак когда ставится,что бы не перебирать их поочереди.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Mr.Smart » 22.03.2011 23:14:38

Конструкции языка нужно знать, а не гадать на кофейной гуще...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Объясните новичку.

Сообщение Maxizar » 22.03.2011 23:20:53

Это никак не связано с операторами типа присвоить (:=) или оператор проверки равенства (=), Это правила оператора выбора case:
Чтобы таких вопросов не возникало, можно прочитать любую книгу по делфи или Free Pascal, бесплатную можно скачать например вот эту:
Основы программирования в среде Lazarus
Автор: К.Т.Мансуров
Можно взять на сайте в разделе книги...
Например в ней оператор выбора описан на стр. 124.

Просто нужно хотябы раз, где описаны основы синтаксиса все же прочитать, иначе у вас будут вопросы, ответы на которые будут иметь такой вид:
Прочитайте на стр 124, на второй вопрос стр 125 и т.д. Не ответить, плохо, но отвечать в таком духе, просто рано или поздно вам просто перестанут это делать как скажем перестали dangreen-у....
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Объясните новичку.

Сообщение Paster Fob » 22.03.2011 23:28:54

Я читал в других книжках только там всё на заумном,а мне нужно по-простому.А книгу я ещё днём скачал.Бегло просмотрел.Завтра почитаю.Спасибо за совет.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Азотирование » 24.03.2011 08:48:00

Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель
Азотирование
незнакомец
 
Сообщения: 1
Зарегистрирован: 24.03.2011 08:37:20

Re: Объясните новичку.

Сообщение Mr.Smart » 24.03.2011 11:35:55

Азотирование писал(а):Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель

А вы знаете, что за работу Учителя нужно платить?! Ах да на пост советском пространстве это не принято...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Объясните новичку.

Сообщение Vadim » 24.03.2011 12:59:28

Paster Fob писал(а):Вот мне и нужно понять какой знак когда ставится,что бы не перебирать их поочереди.

Всё смешалось в доме Обломских: люди, кони... :D
Вот это как раз пример по Вашему вопросу. ;) У каждого языка есть свой синтаксис. Язык программирования здесь не исключение. Паскаль - не Си и создавался он более-менее человекообразным, поэтому к нему нужно применять те критерии правильности синтаксиса, которые Вы применяете к Вашему языку общения. А точнее - к английскому. Давайте перейдём к английскому словарю, чтобы было понятнее:
Case - выбор значения
of - из
а далее, всё как в том примере, что я Вам привёл выше - Вы задаёте значение "дом Обломских", далее следует двоеточие, т.к. Вам нужно отделить значение от зависимых от этого значения действий или данных. Заметьте, всё как в обычном языке. В обычном языке двоеточие служит символом-разделителем и в Паскале двоеточие тоже служит символом-разделителем между каким-то данным и зависимыми от него обстоятельствами.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Объясните новичку.

Сообщение Paster Fob » 01.04.2011 18:31:45

Азотирование писал(а):Да, по книгам сложновато. Если и достигаются хорошие результаты, то через какое то время, поэтому нужен учитель

Значит далее изучил я цикл со счётчиком 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.

Так я и не смог понять принципа работы этой программы,почему цифры на экране появились в обратном порядке?
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Little_Roo » 01.04.2011 18:48:05

Paster Fob писал(а):Значит далее изучил я цикл со счётчиком for...to...do

Может придется (но это ведь так сложно :( ) поизучать далее...
или прочитать где-нибудь (в любом учебнике по Паскалю) про downto
Но по уровню задачи - в каком классе Вы, Paster Fob , а ???
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Объясните новичку.

Сообщение Paster Fob » 01.04.2011 19:03:35

или прочитать где-нибудь (в любом учебнике по Паскалю) про downto

Я маленько не дописал,было предложено выполнить задание в 2-ух вариантах с помощью downto и так как выше я писал.Так вот вариант с downto я решил сам,а вот тот про который я расписал выше не смог,вот и объясните мне как так вышло?В книге примеров почти нет.А как я должен учиться?
по уровню задачи - в каком классе Вы, Paster Fob , а ???

какой нафиг класс,я школу в 1999 году закончил.Мне 28 лет.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Vadim » 02.04.2011 04:13:44

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
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Объясните новичку.

Сообщение informat » 02.04.2011 07:07:27

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.

?
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Объясните новичку.

Сообщение Paster Fob » 02.05.2011 22:27:26

Всем привет.дошёл я до процедур и мой мозг вскипел.Значит так на примере этой программы показана работа с отладчиком,как находить ошибки.Задание такое,ввести 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.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Padre_Mortius » 02.05.2011 23:06:24

Мне не понятно как в параметр arg попала переменная s

Вы сами ее передаете как аргумент процедуры вот этим вызовом процедуры
Код: Выделить всё
Scan(s);
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Объясните новичку.

Сообщение Putnick » 03.05.2011 10:00:41

Уважаемый Paster Fob, предполагая Ваше дальнейшее затруднение с тем, что
Paster Fob писал(а):Внутри процедуры всё работает,после выхода из неё программа работает не правильно.
, спешу Вас уведомить, что в Паскале у процедуры есть как параметры-значения, так и параметры-переменные. Последние в описании процедуры оформляются с использованием ключевого слова var. Таким образом, если Вы замените строку
Код: Выделить всё
procedure Scan(arg:string);
на
Код: Выделить всё
procedure Scan(var arg:string);
, то программа начнет работать правильно.
С уважением, Алексей.
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

Пред.След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru