Отправляет email-рассылки с помощью сервиса Sendsay

Pascal для школьников

  Все выпуски  

Pascal для школьников


Информационный Канал Subscribe.Ru

Добрый день ! Вы сейчас читаете второй выпуск нашей рассылки . Сегодня я вам представлю первую программу и мы попытаемся разобраться в переменных . Итак , первая программа :

1 Program p1;
2 begin
3 Write('Hello World');
4 end.

Вот эта очень простая программа . Я пронумерировал строки , но они не являются частью программы . Они нужны мне чтоб я вам смог объяснить что к чему .
  • Строка 1 состоит из двух слов : Program и p1; Слово Program является зарезервированным . Это означает что мы можем его использовать лишь в определенных местах . Слово P1 указывает как бы название программы . Но это не название файла который находится на диске , не путайте пожалуйста . Например , мы можем написать вместо P1 firstprogram , что переводится с английского как "первая программа" . Слово P1 является идентификатором . Любое слово может быть идентификатором ( почти ) . Идентификаторами не могут быть :
    • Зарезервированные слова . Например , слово Program мы не можем использовать в качестве идентификатора .
    • Слова , начинающиеся с цифр и в которых содержатся специальные символы .
    • Слова , разделенные пробелом
  • Строка 2 состоит из зарезервированного слова begin ( начало ) . Это слово указывает на начало исполняющей части программы . После него не ставиться точка с запятой
  • Строка 3 содержит процедуру , которая выводит на экран строку 'Hello world'
  • Строка 4 содержит слово end и запятую . После последнего end в программе никогда не ставится точка с запятой !!! После него ставится всегда точка . end указывает на конец исполняющей части программы , а точка на конец самой программы .

'Hello World' называется аргументом процедуры , то есть все что находится между скобками . Если мы напишем вместо 'Hello World' 'I am a schoolboy' то на экране появиться I am a schoolboy . Можете убедиться сами . Если вам что-то не понятно , то пишите мне и спрашиваете обо всем !!! Вскоре появится сайт , который будет содержать все ваши вопросы ( ну и мои ответы конечно ) . А вот и программа :

Program p1;uses crt;
begin clrscr;
Write('I am a schoolboy');
end.

А теперь давайте разберем новые слова в нашей программе :
  • uses ( использует ) - зарезервированное слово . Подключает библиотеки к программе .
  • crt - стандартная библиотека работы с экраном . Зарезервированное слово .
  • clrscr - аббревиатура от ClearScreen ( очистить экран ) . Очищает экран полностью .

Библиотека это набор функций и процедур , которые находятся в определенном файле .

Давайте теперь разберем программу посложней :

program p1; uses crt;
var a,b,c : integer;
begin clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
c:=a+b;write('c=');write(c);
end.

Эта программа вычисляет сумму двух чисел , которые были введены с клавиатуры и показывает результат на экране . Здесь есть много непонятного , но сейчас еще рано все объяснить . Я вам объясню только 2 строку :
var a , b , c : integer
  • var - зарезервированное слово . Используется для объявления переменных .
  • a - это имя первой переменной .
  • , - разделяет переменные при их декларации
  • b - имя второй переменной
  • , - разделяет переменные при их декларации .
  • с - имя третей переменной
  • : - указывает на окончание перечисления переменных и на то что сейчас будет указан их тип .
  • integer - Это тип переменных

Что такое переменная ? Представьте себе ящик , примерно вот такой :
Что мы можем класть в ящиках ? Все что угодно ( точнее все что вмещается ) . Ну например мы можем класть в них яблоки , ручки , инструменты . Переменные тоже являются своеобразными ящиками . Мы можем класть в них данные . Например :
8 10 15 3 1 -5 0 -1 -17 -8
В этих переменных мы положили числа . Все они являются целыми . Они не содержат дробной часть .
2.1 6.3 5.9 18.19 23.123 -18.7 -1.17 -8.1 -5.8 -3.7
Это уже не целые числа , а дробные . Это всем известная форма записи дробных чисел . Как так ? , спросите вы . Дело в том , что есть еще одна форма записи дробных чисел . Вот она :
0.21e+2 2.12e+3 21e-2 81e-1 1783e-5 1e-1 2e-2 3e-4 2e+3 0.1e+1
Как во всем этом разобраться ? Очень легко . 0.21e+2 . Записать математически , это получиться вот так : 0.21*102 . Однако если вы и эту форму записи первый раз видите , то давайте попытаемся понять по-другому : давайте рассмотрим несколько примеров :
  • 0.23e+2 . Надо взять точку и перенести ее через две цифры на право . ( e+2 , е - перенести , + - направо , на лево будет минус , 2 - на сколько цифр перенести ) . Результат : 23
  • 23е-2 . Надо взять точку и перенести ее на две цифры влево . Результат : 0.23
  • 23е+7 . Надо взять точку и перенести ее на 7 цифр вправо , то есть добавить 7 нулей . Результат : 230000000
  • 23е-7 . Надо взять точку и перенести ее влево на 7 цифр . Но тут нету 7 цифр ! . Правильно . А вы представьте что есть , и что все они 0 . Результат : 0.0000023
c a 1 +
В этих переменных мы положили символы . В каждой такой переменной может находиться только по одному символу .
Colea + Nadea = Love
В этих переменных мы положили строки . В этих переменных могут находиться только по одному символу , а может и больше ( максимально до 255 ) .
У каждой переменной есть имя . Имя - это идентификатор ( вспомните что мы говорили о идентификаторах ) . Все что я скажу ниже , все будет относиться к переменным . Главное чтобы вы все поняли .
Чтобы использовать переменную , ее надо объявить . Это значит что мы должны указать что это переменная , указать ее имя ( имя должно быть уникальным ) , указать ее тип . Мы указываем что это переменная ключевым словом var . Имя мы указываем какое хотим , в пределах правил . А тип данных ... Мы их частично рассматривали . А теперь давайте рассмотрим подробней .
  • Целые числа : тип Integer
    Чтоб объявить переменную типа Integer мы поступаем вот так :

    Var a:integer;

    Чтоб объявить две переменные типа Integer мы делаем вот так :

    Var a,b:integer;

    Чтоб объявить три переменные типа Integer мы делаем вот так :

    var a,b,c:integer;

    И так далее .
  • Дробные числа : Real
    Чтоб объявить переменную типа Real делаем вот так :

    var i:real

    Чтоб объявить 2 переменные типа Real делаем вот так :

    var i,j:Real;

    Чтоб объявить 3 переменные типа Real делаем вот так :

    var i,j,k:integer;

    Чтоб объявить 1 переменную типа Real и одну типа Integer делаем вот так :

    var i:real
    a:integer;


    Чтоб объявить 1 переменную типа Real и 3 типа Integer делаем вот так :

    var i:real
    a,b,c:integer;


    Ну я думаю что вы поняли . Можно понаобъявлять переменных хоть до глюков :) .
  • Символьный тип : тип char
    Чтоб объявить переменную типа char делаем вот так :

    var m:char;

    var m:char;
    i:real;


    Чтоб объявить 1 переменную типа char , 1 переменную типа integer и одну переменную типа real делаем вот так :

    var m:char;
    a:integer;
    i:real;


  • Строковый тип : тип string
    Чтоб объявить переменную типа string делаем вот так :

    var sr:string;

    Чтоб объявить 1 переменную типа string , 1 типа real , 1 типа integer и 1 типа char делаем вот так :

    var st:string;
    i:real;
    a:integer;
    m:char;



Для чего нужны переменные ? Они помогают хранить разную информацию . Переменная объявляется после ключевого слова var , а используется после ключевого слова begin . Самое простое , что мы можем сделать с переменной , это присвоить ей значение . := называется оператором присваивания . Давайте рассмотрим все это на конкретном примере :

Program p1;uses crt;
var a : integer;
begin clrscr;
a:=2;
end.

В этой программе мы объявили переменную типа integer и присвоили ей значение 2 . Давайте рассмотрим следующий пример :

Program p1;uses crt;
var a:integer;
begin clrscr;
a:='opasea!';
end.

В этой программе есть одна пребольшая ошибка : попытка присвоить переменной типа integer значение типа строка . Такое делать нельзя !!! Если эта переменная типа integer то ей можно присвоить только значение типа integer . Точно так же и со всеми другими типами . Однако есть исключение . Давайте рассмотрим следующую программу :

Program p1;uses crt;
var a:integer;
i:=real;
begin clrscr;
a:=2.1;
i:=2;
end.

Вы наверное подумали что в этой программе 2 ошибки . Это не так . Тут только одна ошибка : попытка присвоить переменной типа integer значение типа real . Это недопустимо . А вот присвоить переменной типа real значение типа integer можно . Почему ? Потому что целые числа полностью входят в состав дробных . Так обстоит дело и с следующей программой :

Program p1;uses crt;
var m:char;
st:string;
begin clrscr;
m:='Andrei';
st:='I';
end.

Попытка присвоить переменной типа char значение типа string вызовет ошибку . А попытка присвоить переменной типа string значение типа char не является ошибкой .
Давайте рассмотрим следующую программу :

Program p1;uses crt;
var a:integer;
i:real;
m:char;
x:string;
begin clrscr;
a:=2;
i:=4.2;
m:='2';
x:='4.2';
end.

Все в этой программе правильно . Не надо путать цифру 2 с символом '2' , число 4.2 со строкой '4.2'.
Переменной можно присвоить не только конкретное значение , но и значение определенного выражения . Давайте опять все на конкретном примере :

Program p1;uses crt;
var a:integer;
begin clrscr;
a:=2-1;
end.

Что случиться сейчас ? Сначала вычисляется значение выражения справа от оператора := , а потом это значение присваивается переменной слева от оператора .
Следующая программа :

Program p1;uses crt;
var a:integer;
begin clrscr;
a:=7/2;
end.

В этой программе есть одна ошибка : значение выражения является дробным и не может быть присвоено переменной а , которая является типа integer .
Еще одна программа :

Program p1;uses crt;
var a:integer;
begin clrscr;
a:=4/2;
end.

В этой программе есть ошибка : операция / определенна только для типа real .
Следующая программа :

program p1;uses crt;
var a:integer;
begin clrscr;
a:=2*(3+7)-2;
end.

Вопрос в том , как вычисляется выражение 2*(3+7)-2 . А вычисляется она почти точно также , как в математике . А сейчас я попрошу вас запомнить одну таблицу : порядок выполнения операций . 1 - самый высокий , 4 - самый низкий .

not , @ 1
* , / , div , mod , and , 2
+ , - , or 3
< / <= , = >= , > <> , in 4

Просто постарайтесь запомнить . Вот и все ! А теперь следующий код :

Program p1;uses crt;
var a,b:integer;
begin clrscr;
a:=2;
b:=a;
end.

Что же случиться тут ? Сначала переменной а типа integer присваивается значение 2 . Потом переменной b типа integer присваивается значение переменной а типа integer .
Возникает вопрос : а что случилось со значением переменной а ? Да ничего , собственно и не случилось . Она по прежнему будет 2 .
А теперь еще одна таблица :

Численные типы Вещественные типы
real string
integer char

Вот что означает эта таблица : Переменной которая выше можно присвоить значение переменной из той же группы , но рангом ниже .
На примере :

Program p1;uses crt;
var i:real;
a:integer;
begin clrscr;


Этот код правильный. А вот следующий неправильный :

Program p1;uses crt;
var i:real;
a:integer;
begin clrscr;
i:=2;
a:=i;
end.

Следующий код правильный .

Program p1;uses crt;
var m:char;
x:string;
begin clrscr;
m:='a';
x:=m;
end.

А вот следующий код неправильный :

Program p1;uses crt;
var m:char;
x:string;
begin clrscr;
x:='a';
m:=x;
end.

Что еще можно делать с переменными ?
Пример :

Program p1;uses crt;
var a,b,c :integer;
begin clrscr;
a:=5;
b:=4;
c:=a+b;
end.

В итоге у переменной с будет значение 8.
Еще один пример :

Program p1;uses crt; var a,b,c,d,e,f:integer;
i:real;
begin clrscr;
a:=6;
b:=8;
c:=10;
d:=7;
e:=8;
f:=9;
i:=(a+b+c+d+e+f)/6;
end.

Мы вычислили среднее значение 6 переменных .
Еще один пример :

Program p1;uses crt;
var a:integer;
begin clrscr;
a:=2;
a:=a*a*a;
end.

Интересно , не правда ли ? Тут нет никакой ошибки ! Вот что происходит в следующей программе :
  • Вычисляется выражение справа от оператора := .
  • Значение выражения присваивается переменной слева от оператора := .

Вот и все ! В итоге а будет равно 8 .
Давайте рассмотрим следующий код :

Program p1;uses crt;
var a:integer;
begin clrscr;
write('a=');
readln(a);
write('a=');
end.

В этой программе содержится строка :

write('a=');readln(a);

Что все это значит ? Давайте по порядку :
  • write('a=');
    Процедура write печатает на экран следующую строку :
    a=
    Если было бы написано вот так :
    write('b+c');
    то на экране появилось бы следующее :
    b+c
    Я думаю вы поняли для чего нужен этот оператор : для печати на экран аргумента ( в наших примерах это 'a=' и 'b+c').
  • readln(a);
    Процедура readln считывает данные , введенные с клавиатуры пользователем , в переменную которая назодится между скобками .
Это пока все что вы должны знать о процедурах write и read .
Примеры задач и их решение .

Пример 1

  • Задача : Найти среднюю оценку у ученика за год если известно что у него пять оценок : 4 , 3 , 4 , 4 , 5 .
  • Решение :

    program p1;uses crt;
    var n1,n2,n3,n4,n5 : integer;
    med : real;
    begin clrscr;
    n1:=4;
    n2:=3;
    n3:=4;
    n4:=4;
    n5:=5;
    med:=(n1+n2+n3+n4+n5)/5;
    end.

Пример 2

  • Задача : Найти среднюю оценку у ученика за год если известно что у него 5 оценок . Оценки вводятся с клавиатуры .
  • Решение :

    Program p1;uses crt;
    var n1,n2,n3,n4,n5 : integer;
    med : real;
    begin clrscr;
    write('n1=');readln(n1);
    write('n2=');readln(n2);
    write('n3=');readln(n3);
    write('n4=');readln(n4);
    write('n5=');readln(n5);
    med:=(n1+n2+n3+n4+n5)/5;
    end.

Пример 3

  • Задача : Вычислите среднюю оценку у ученика за год если известно что у него 5 оценок . Оценки вводятся с клавиатуры . Результат печатается на экране .
  • Код :

    Program p1;uses crt;
    var n1,n2,n3,n4,n5 : integer;
    med : real;
    begin clrscr;
    write('n1=');readln(n1);
    write('n2=');readln(n2);
    write('n3=');readln(n3);
    write('n4=');readln(n4);
    write('n5=');readln(n5);
    med:=(n1+n2+n3+n4+n5)/5;
    write('med=');write(med);
    end.

Пример 4

  • Задача : С клавиатуры вводится число и цифра . Прикрепить цифру к числу . Например , если считываются 102 и 2 то результат будет 1022 . Число и цифра вводится с клавиатуры . Результат печатается на экране .
  • Вся задача сводится к следующему : как прикрепит цифру к числу ? Вот так : 102*10+2=1022; 307*10+8=3078;
    Код :

    program p1;uses crt;
    var nr,ts,ch:integer;
    begin clrscr;
    write('nr=');readln(nr);
    write('ts=');readln(ts);
    ch:=nr*10+ts;
    write('ch=);write(ch);
    end.

Пример 5

  • Задача : ученик купил x тетрадей по p1 рублей и y ручек по p2 рублей . Сколько потратил ученик ?
  • Решение : ученик потратил x*p1+y*p2 рублей .
    Код :

    Program p1;uses crt;
    var x,p1,y,p2,total : integer;
    begin clrscr;
    write('x=');readln(x);
    write('p1=');readln(p1);
    write('y=');readln(y);
    write('p2=');readln(p2);
    total:=x*p1+y*p2;
    write(total);
    end.

Домашнее задание

  1. Написать программу Pascal которая вычисляет среднее значение 3 чисел . Числа вводятся с клавиатуры . Результат печатается на экране .
  2. Написать программу Pascal которая суммирует 5 чисел . Числа вводятся с клавиатуры . Результат печатается на экране .
  3. Написать программу Pascal которая вычисляет разницу между двумя числами . Первое число всегда больше второго . Числа вводятся с клавиатуры . Результат печатается на экране .
  4. Напишите программу , которая вычисляет квадрат числа . Число вводится с клавиатуры . Результат печатается на экране .
  5. С клавиатуры вводится число от 1 до 12 . Это число обозначает текущее время (час ) . Напишите программу которая вычисляет сколько осталось до 12 часов . Результат печатается на экране .
  6. С клавиатуры вводится число . Напишите программу которая вычисляет разницу между ней и ее квадратом .Результат печатается на экране .
  7. Дается формула 2*x+3=y . С клавиатуры вводятся 3 разных числа . Эти числа суммируются и получается x . Вычислите y . Результат печатается на экране .
  8. У Ианы x рублей . Если ей дадут еще y рублей , то с половиной всей суммы она сможет купить учебник который стоит т рублей . Напишите программу которая вычисляет начальную сумму x . y и т вводятся с клавиатуры . x печатается на экране .
  9. Принтер печатает со скоростью 12 страниц в минуту . Напишите программу которая вычисляет сколько страниц напечатает принтер за x минут . X вводится с клавиатуры . Результат печатается на экране .




P.S.1 Для каждого урока вы должны прислать отчет. Отчет должен содержать решение всех задач . В конце этой рассылки будет проведена олимпиада , победители которой получат определенное количество очков . Также вы получите очки за отчеты :
  • За отчет ( за то что вы его прислали ) вы получаете 1 очко .
  • За каждую правильно решенную задачу вы получаете 3 очка .
  • За самый оптимальный алгоритм вы получаете 5 очков
P.S.2 Желательно чтобы вы присылали мне отчеты с одного и тоже же емайла для того чтобы я мог легче весть учет накопления очков .

P.S.3 Если вы не поняли что-то , пришлите мне письмо . Я готов отвечать на все ваши вопросы , даже на те , которые не имеют никакого отношения к информатике.

P.S.4 Если вы получили не первый выпуск нашей рассылки , то напишите мне и я вышлю вам по почте все прошедшие выпуски .

P.S.5 Читатели рассылки , у которых будет самое большое количество очков будут иметь право бесплатно подписаться на платную рассылку , которая выйдет по окончанию этой .

P.S.6 Мой емайл: hardworkingman@mail.ru

P.S.7Если у вас нет Паскаля , то напишите мне и я его вам отправлю по емайлу .

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.games.pascalforschool
Отписаться

В избранное