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

> Прочтите, прежде чем создать тему.

В этом форуме Вы можете предложить изменения на форуме или обсудить действия администрации.

> Написание статей!
сообщение
Сообщение #1


...
*****

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

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


Есть ли у кого-нибудь из участников желание попробовать себя в сабже? Любые темы связанные с паскалем(но не делфи!).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Слов много, а дела 0. Похоже, что тут все благие намерения потиху затухают за отутствием эитузиастов smile.gif Начну короче.

Оговорюсь сразу - всё, что я пишу касается Borland Pascal этак 7.0, т. к. он наиболее распространён.

Что такое программа? Программа это нечто smile.gif Более подробное описание дать наверно невозможно smile.gif Одни скажут одно, другие другое, но все сойдутся в одном: программа обрабатывает информацию. Информация бывает разная: список разных мороженных у мороженщика, дни рождения друзей, график авиарейсов и т. д. Программа работает с какой-то информацией, что-то из неё выделяет и сообщает об этом пользователю. Это может быть стоимость крембрюле, напоминание о том, что пора поздравить Василия Пупкина с денюхой или скромный намёк на то, что в твой самолёт в Китай уже улетел, придётся итить пешком. Итого: программа получает данные, обрабатывает их и выдаёт результат. Теперь по-подробнее об этих этапах.
Начну со второго - обработка. Мы предполагаем, что нужную информацию мы можем получить силой мысли и писать для этого ничего не надо, но вот чтобы как-то её обработать придётся эту мысль материализовать. Чтобы работать с информацией надо её где-то хранить. Можно и не хранить в принципе, а постоянно черпать её из "первоисточника", но это, как показывает практика, очень даже не выход. Где же её можно хранить? Для этого есть такое понятие как переменные. Переменная - это кусочек памяти, с которым программа может работать бех каких-то затруднений и с большой скоростью (по сравнению с постоянным вводом пользователя...). Как обзавестись переменной? Это делается так:
Код

Var
 VariableName:VariableType;

Чего тут написано? Тут открывается блок Var, в которм и описываются переменые, затем указывается имя переменной и через двоеточие её тип. В конце ставится символ ';' как указатель того, что "предложение" закончено. В паскале это обязательно: заканчивать предложения точкой с запятой. Закрывать блок Var не надо - паскаль сам допрёт когда это надо сделать. Теперь обсудим, что значит VatiableName и VariableType. Имя переменной - это какой-то набор символов (допускаются только латинские буквы, цифры и знак подчёркивания, причём первой цифра быть не может), который указывает "имя" того участка памяти, в котором хранится значение переменной. По этому имени программа и будет с ним работать. Рекомендуется давать символические имена переменным. Например фамилию мороженщика лучше хранить в переменной Surname, а цену пломбира в переменной Cost, хотя никто и не запрещает назвать их например q и w.
Теперь поговорим о типе переменной. Что это такое? Информация бывает разная. У Васи есть имя, у мороженного есть цена, в месяце встречаются дни. Вся эта информация носит разный характер содержимого - имя - набор символов, цена - возможно дробное число, номер дня - натуральное число. Тип переменной как раз несколько конкретизирует хранимую в переменной инфу. Вот какие типы могут быть у переменных:
Char - один символ.
String - последовательность символов длиной не более 255.
Byte - целое число от 0 до 255.
ShortInt - целое от -128 до 127.
Integer - целое от -32768 до 32767.
Word - целое от 0 до 65535.
LongInt - целое от -2147483648 до 2147483647.
Есть ещё вещественные типы: Real, Single, Double, Extended. Они различаются по пределам чисел, которые можно в них хранить и по точности.
Надо точно определять тип переменной, который тебе понадобится. Есди в результате работы программы может получиться дробное число, то хранить его надо в переменной типа например Double, а, если нет, то лучше воспользоваться допустим Integer'ом. Так же, если есть уверенность, что число не превзойдёт допустим 1000, то не стоит под такие нужды отводить LongInt - достаточно Integer'а или Word'а.
Есть и более сложные типы данных, но о них поговорим позже.
Итак, для примера опишем переменные для хранения информации о каком-нидь человеке:
Код

Var
 Name:String[20];
 SurName:String[20];
 Address:String;
 Phone:String[15];
 Payment:Double;
 Age:Byte;

Strin[20], String[15]? Что это такое? Это ограничение максимального количества символов в строке. Это нужно для того, чтобы сэкономить память. Не надо кричать, что у меня этой памяти гигабайт и т. д. Без всяких трюков программе на паскале доступен лишь первый мегабайт памяти, в котором кроме самой программы и её переменных хранится куча всякой информации, так что иногда приходится экономить.
Ну вот есть у нас переменные. Я что с ними можно делать? А много чего. В паскале есть несколько типов операций над переменными. Опишу арифметические: +, -, *, /, Div, Mod. Первые 4 должны быть понятны, а последние опишу. Div делит одно число на другое нацело. То есть 6 Div 2 и 7 Div 2 возвращает 3 в обоих случаях. А Mod берёт остаток от деления. Например 11 Mod 7 = 4, 10 Mod 7 = 3, 18 Mod 7 = 4. Теперь уже можно написать программу, которая будет решать проблему всех веков и народов - вычислять 2*2 smile.gif
Код

Var
 n:Integer;
Begin
 n:=2*2;
End.

Тут определяется переменная n типа Integer. Затем начинается сама программа (со слова Begin). В ней вычисляется выражение 2*2, а результат запиывается в переменную n. Программа завершается словом End. В конце программы всегда ставится точка. Но писать такие программы никому не нужно. Они должны быть более сложные, чтобы приносить какую-то практическую пользу.
Рассмотрим операторы паскаля, которые позволяют усложнить программу.
If Then Else. Оператор проверки условия. Проверяет некоторое условие и выполняет блок команд описанный после слова Then. Если условие не верно, то выполняется блок Else, который в принципе может отсутствовать за ненадобностью. Посмотрим на примере:
Код

Var
 a:Integer;
 b:Integer;
Begin
 a:=Random(10);
 If a>5 Then
   a:=10-a;
 b:=Random(10);
 If b>5 Then
   b:=10-b
 Else
 Begin
   a:=a+2;
   b:=b+2
 End
End.

Тоже глупая программа, которая заимается никому не нужными вычислениями. Посмотрим, что в ней такого есть. Появилось новое слово: Random. Это функция такая. Она возвращает случайное число от нуля до девяти (10-1) в нашем случае. Далее идёт прмер блока If-Then-Else без Else, а затем пример с Else, в которм выполняется несколько команд. Если бы в блоке Else выполнялась одна команда, то Begin и End ставить было бы не обязательно. Так же надо отметить момент с ';'. Перед End её ставить не обязательно практически во всех случаях, а перед Else её ствить вообще НЕЛЬЗЯ. Едем дальше.
Case. Оператор выбора. Предназначен для рассмотрения значения переменной и каких-то действий в том или ином случае. Надо отметить, что переменная должна быть скалярной, т. е. всякие строки и дроби недопустимы. Рассмотрим на примере.
Код

Var
 a,b,c:Integer;
Begin
 a:=Random(10);
 c:=1;
 Case a Of
   1:b:=2;
   2:b:=3;
   3:
   Begin
     b:=4;
     c:=2
   End
   Else
     b:=7
 End
End.

В зависимости от сгенерированного числа в переменную b записывается то или иное число. Так же как и в блоке If-Then-Else, при необходимости выполнить несколко действий надо поставить слова Begin и End. Если значение переменной не находится в списке вариантов, то выполняется ветвь Else, которая так же как и в If-Then-Else может отсутствовать.
For. Оператор цикла. Предназначен для выполнения некоторых действий несколько раз.
Код

Var
 i,n:Integer;
Begin
 n:=1;
 For i:=1 To 5 Do
    n:=n*i
End.

Эта программа уже не такая бессмысленная. Она вычисляет 5!. Происходит это так:
1). В n записывается 1.
2). В i записывается 1.
3). n домнажатся на i.
4). i увеличивается на 1.
5). Проверяется не стало ли i больше 5 и, если не стало, то переходит к шагу 3.
Есть ещё вариант For ... DownTo ... Do ... Он отличается от предыдущего тем, что значение счётчика не увеличивается, а уменьшается.
[b]While и [Until]. Тоже операторы циклов, но в отличие от For, они не требуют счётчика, а проверяют некоторое условие.
Код

Var
 i,n:Integer;
Begin
 i:=1;
 n:=1;
 While n<1000 Do
 Begin
   n:=n*i;
   i:=i+1
 End
End.

Эта программа вычисляет первый факториал привышающий 1000. В цикле выполняется увеличение n и i, пока n не превзойдёт 1000. Так же эту программу можно реализовать и другими способами:
Код

Var
 i,n:Integer;
Begin
 i:=1;
 n:=1;
 Do
   n:=n*i;
   i:=i+1
 Until n>1000
End.

и
Код

Var
 i,n:Integer;
Begin
 n:=1;
 For i:=1 To 100 Do
 Begin
   n:=n*i;
   If n>1000 Then
     Break
 End
End.

В последнем варианте используется команда Break. Она служит для прерывания цикла. Есть ещё команда Continue, которая не прерывает цикл, а пропускает оставшееся его тело и переходит на проверку условия.

Ну вот, с основными моментами вроде разобрались. Теперь вернёмся к вопросу о вводе и выоде информации. Не станем пока затрагивать вопросы работы с файлами или сетью, а просто будем работать с клавиатурой и монитором. Ввод с клавиатуры осуществляется процедурой Raad или ReadLn, а вывод Write или WriteLn. Суффикс Ln в конце обозначает то, что по завершению работы курсор перейдёт на следующую строку.
Теперь уже можно написать полноценную программу. Она будет запашивать некоторое число и выводить его факториал.
Код

Var
 Result:LongInt;
 i,n:Integer;
Begin
 Write("Введите число: ");
 ReadLn(n);
 If n<=0 Then
   WriteLn("неверное число")
 Else
 Begin
   Result:=1;
   For i:=1 To n Do
     Result:=Result*i;
   WriteLn("Факториал этого числа = ",Result)
 End
End.

Разобраться в этой программе думаю не составит никакого труда.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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