Pascal, Delphi и UnrealScript Уроки с примерами (Tutorials and examples)
вторник, 10 июля 2012 г.
6. Простейшая программа считающая сумму двух чисел (Pascal)
Программа будет считать сумму двух чисел введённых пользователем и выводить результат на экран.
Сначала введём название программы
program summa;
Далее нужно подключить модуль работы с экраном, в дальнейшем он нам пригодится
uses crt;
Раз программа считает сумму двух чисел, то и понадобятся две переменные
var x,y:integer;
Далее пишем слово begin, оно обозначает начало программы
begin
При запуске программы должно появляться сообщение объясняющее пользователь что нужно сделать.
writeln (‘vvedite pervoe chislo’);
После этого надо будет ввести число, программа будет ждать пока переменной (x) не будет присвоенно число
readln (x);
то же самое нужно сделать со второй переменной (y)
writeln (‘vvedite vtoroe chislo’);
readln (y);
В конце лучше всегда ставить пустой readln, чтобы программа не сразу выходила, а ждала нажатия клавиши
readln;
И в конце обязательно должен быть End с точкой.
End.
program summa;
uses crt;
var x,y:integer;
begin
clrscr;
writeln (‘vvedite pervoe chislo’);
readln (x);
writeln (‘vvedite vtoroe chislo’);
readln (y);
writeln (‘Summa ‘, x+y);
readln;
end;
Вычислить сумму и произведение чисел
Даны 3 целых числа — А, В, С. Вычислить их сумму и произведение.
2 задача.
Дана длина ребра куба (целое число). Найти объем куба и площадь его боковой поверхности.
Задача 3
Вычислите выражение:
((7.478937-89.2456) / (883.5995 + 618.332))*76.2833
В массиве вычислить сумму, произведение и количество положительных чисел
требуется срочная помощь в решении данной задачи задачи: в N-мерном массиве нужно вычислить сумму.
Вычислить сумму положительных и произведение отрицательных целых чисел
С клавиатуры водится последовательность целых чисел, заканчивающихся числом 0. Составить алгоритм и.
По номеру функции вычислить 1-сумму, 2-разность, 3-произведение, 4-деление введеных чисел
Написать программу,которая запрашивает два числа и номер функции от 1 до 4 и вычесляет: 1-сумму.
По номеру функции вычислить 1-сумму, 2-разность, 3-произведение, 4-деление введеных чисел
А можете еще помочь,надо к этой программе создать блок схему,а как она выглядить будет я не.
Добавлено через 47 секунд
Так же можно поправить вторую.
Добавлено через 1 минуту
Если это АВС, то не нужно clrscr;
Вводится 10 чисел. Найти сумму всех четных чисел и произведение нечетных
вводится 10 чисел.найти сумму всех четных чисел и произведение нечетных
Для заданных 10 чисел найти: сумму и произведение четных чисел
Для заданных 10 чисел найти: сумму и произведение четных чисел
Последовательности чисел. Найти сумму и произведение отрицательных двузначных чисел
Вводится 25 чисел. найти сумму и произведение отрицательных двузначных чисел
Вычислить произведение чисел с промежутка (A, B], количество отрицательных чисел, стоящих на местах, кратных 3
Вычислить произведение чисел, принадлежащих промежутку (A, B] и подсчитать количество отрицательных.
Линейные алгоритмы на языке программирования Паскаль
Линейный алгоритм
Линейным называется алгоритм, в котором команды выполняются последовательно друг за другом. Это самая простая конструкция. Программирование линейных алгоритмов освоить очень легко. Для написания простых программ на паскале разберем основные правила записи кода, основные команды и операторы Паскаль.
Структура программы на языке Паскаль
Прежде чем самостоятельно писать программы, разберем ее структуру на примере. Ниже приведен код программы, которая вычисляет сумму двух чисел и выводит ее на экран.
Заголовок программы
Текст программы начинается со слова program. После него записывается имя программы. Данная строка носит информативный характер и ее можно не писать.
Раздел подключения модулей начинается со служебного слова uses, за которым следует список имен модулей, перечисляемых через запятую.
Раздел описаний может включать разделы описания переменных, констант, меток, типов, процедур и функций, которые следуют друг за другом в произвольном порядке. Раздел подключения модулей и раздел описаний меток, констант и др. могут отсутствовать.
Раздел описания переменных
Раздел программы, обозначенный служебным словом var, содержит описание переменных с указанием их типов. Они используются для хранения исходных данных, результатов вычисления и промежуточных результатов.
Комментарии в программе можно записывать внутри фигурных скобок. Они игнорируются во время выполнения программы. Эти пояснения вы пишите только для себя.
В нашем примере переменные с именами X и Y используются для хранения исходных данных. Переменная с именем Z используется для хранения результата вычислений.
Имя переменной может записываться большими или маленькими латинскими буквами. Имя может содержать цифры, знак подчеркивания и не должно начинаться с цифры. Прописные и строчные символы считаются одинаковыми. В качестве имени нельзя использовать служебное слово языка Pascal.
Переменные одного типа можно указать в одной строке через запятую. После ставится двоеточие и указывается тип, к которому принадлежат переменные. Тип определяет допустимый диапазон значений.
Принадлежность переменной к типу integer означает, что она может хранить только целые числа. Если требуется хранить действительные (дробные) числа, тогда используется тип real.
Тело программы
Все что находится между служебными словами Begin и end — тело программы. Здесь записываются основные команды.
Оператор присваивания значений переменным имеет следующую структуру: переменная := выражение
Значок : = (двоеточие, равно) читается как «присвоить».
Умножение обозначается символом * (звездочка), деление — символом / (слеш).
Вывод результата выполняет команда write или print.
Каждая строка содержащая команду на языке Паскаль обязательно заканчивается символом «точка с запятой«.
Команды в Паскаль для ввода и вывода данных
Команда Read
В первом примере мы присвоили значения переменным непосредственно в тексте программы. Но так как программа пишется для решения множества однотипных задач, то удобнее задавать значения переменным во время ее работы. Для этого применяется команда read, которая позволяет ввести текстовые или числовые данные с клавиатуры.
Модифицируем код программы из примера выше.
Теперь ввод значений переменных Х и У будет осуществляться по запросу работающей программы. В этот момент нужно будет с клавиатуры ввести два числа через пробел и нажать клавишу Enter, чтобы продолжить выполнение программы.
При работающей программе в системе программирования PascalABC появится строка ввода данных. Там и пишутся значения переменных.
Команда Write
В предыдущем примере, при работе программы, не совсем понятно, что нужно вводить и что за числа появляются на экране по завершению работы программы. Поэтому изменим код программы, чтобы у нее появился минимальный пользовательский интерфейс. Для этого задействуем уже знакомую нам команду Write.
Теперь посмотрите, как добавленные строки повлияли на работу программы.
Readln и Writeln в паскале — это модифицированные команды Read и Write. В командах добавлено окончание ln (line new — новая строка). Такая форма операторов делает последующий вывод информации, при работе программы, с новой строки.
Также поменялся вывод результата. Здесь тоже появилась подсказка.
Примеры программ на паскале — задания на линейные алгоритмы
Задание 1. Модифицировать программу так, чтобы она вычисляла и выводила на экран сумму и произведение трех целых чисел.
Решение:
Назад
10.1.Оператор цикла WHILE (цикл ПОКА).
Формат оператора:
WHILE логическое выражение DO;
Пример 1. Программа подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+. 1/N.
Воспользуемся для этого алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны.
Program NOD;
Var a,b:integer;
Begin
Write (‘ введите два натуральных числа ‘)
Readln(a,b)
While a<>b do If a>b then a:=a-b else b:=b-a;
Writeln(‘ НОД =’,a);
Readln
End.
Program prim_10;
Var S:real;
N:integer;
Begin
S:=10;N:=1;
While s Тренировочные задания.
1. Даны целые числа а и b (а>b). Определить:
a. Результат целочисленного деления a на b, не используя стандартную операцию целочисленного деления;
b. Остаток от деления а на b не используя стандартную операцию вычисления остатка.
2. Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку «5»?. Условный оператор не использовать.
3. Напечатать минимальное число, большее 200, которое нацело делится на 17.
4. Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить: за какой месяц величина ежемесячного увеличения вклада превысит 30 руб.; через сколько месяцев размер вклада превысит 1200 руб.
5. *В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано натуральное число N. Как наименьшим количеством таких денежных купюр можно выплатить сумму N (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.
Разбор заданий урока 9.
5. Дано четырехзначное число N. Выяснить:
a. Является ли число палиндромом?
Для решения этой задачи надо записать число в обратном порядке. Для этого единицы умножаем на 1000, прибавляем число десятков умноженное на 100, число тысяч умножаем на 10 и прибавляем число десятитысяч. Если полученное число будет равно исходному, значит это палиндром.
Program prim9_5а;
Var x,y:integer;
Begin
Write(‘введите четырехзначное число’);
Readln(х);
y:=(x mod 10)*1000+((x div 10) mod 10)*100+((x div 100) mod 10)*10+x div 1000;
If x=y then writeln (‘число палиндром ‘)
Else Writeln(‘это не палиндром ‘);
Readln;
End.
6. Трамвайный билет имеет шестизначный номер. Выяснить, является ли билет «счастливым». Билет назовем «счастливым», если сумма первых трех цифр равна сумме последних трех цифр. Примечание. Так как шестизначное число больше 32767 (тип Integer), необходимо номер билета определит как тип Longint(до 10 знаков).
Program prim9_6;
Var x1,x2:integer;
x,:longint;
Begin
Write(‘введите номер билета’);
Readln(х);
X1:=x div 100000+(x div 10000) mod 10+(x div 1000) mod 10; <сумма первых трех цифр>
X2:=(x div 100) mod 10+(x div 10) mod 10+x mod 10; <сумма последних трех цифр>
If x1=x2 then writeln (‘ билет счастливый ‘)
Else Writeln(‘билет не счастливый ‘);
Readln;
End.
Цикл с постусловием
Продолжим знакомство с операторами цикла, имеющимися в Паскале. Повторение группы операторов (тела цикла) можно организовать и с помощью оператора, где проверка условия осуществляется после выполнения тела цикла.
11.1.Оператор цикла REPEAT (цикл ДО).
Формат оператора:
REPEAT оператор; оператор;. оператор UNTIL логическое условие;
Пример 1. Составить программу подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+. 1/N используя оператор цикла REPEAT.
Program Summa;
Var S:real;
N:integer;
Begin
S:=0;N:=0;
repeat
N:=n+1;
S:=s+1/n
Until n>1000;
Writeln(s);
Readln
End.
11.2.Поиск наибольшего числа.
Предположим, нам необходимо ввести с клавиатуры N чисел, найти из них наибольшее и вывести его. Для решения этой задачи предлагается следующий алгоритм:
1. Ввести первое число в переменную Max.
2. Ввести следующее число в переменную Next.
3. Если Next>Max, то Max:=Next.
Пункты 2 и 3 повторять, пока не будут введены все числа.
4. Вывести значение переменной Max.
Действительно ли будет напечатано наибольшее из N чисел? Докажем это.
После выполнения первого пункта в переменной Max находится наибольшее из уже введенных чисел. Это справедливо, т.к. введено лишь одно число.
Повторение пунктов 2 и 3, в сущности, представляет собой цикл, который выполняется, пока не будут введены все числа. Если перед очередным повторением цикла в Max находится наибольшее из введенных чисел, то после выполнения пунктов 2 и 3 там снова будет наибольшее из введенных чисел.
В последнем пункте значение Max будет выведено.
Этот пример показывает, что алгоритм можно доказать, как доказывают математическую теорему. Программируя доказательный алгоритм, можно не опасаться ошибок в алгоритме, конечно, если нет ошибок в доказательстве.
Program maximum;
Var N, max, next, k: integer;
Begin
Write(‘Введите количество чисел’); Readln(n);
Write(‘Введите число’); Readln(max);
k:=1;
repeat
Write(‘Введите число’); Readln(next);
K:=k+1;
If next>max then max:=next
Until k=n;
Writeln(max);
Readln
End.
Тренировочные задания.
1. Введите с клавиатуры 6 чисел и определите их среднее арифметическое.
2. Напишите программу, которая вводит целые числа с клавиатуры и складывает их, пока не будет введено число 0.
3. Напечатайте 20 первых степеней числа 2.
4. Найдите минимальное из N чисел.
5. Дано натуральное число. Выяснить, является ли оно простым, т.е. делится только на 1 и на само себя.
Цикл с известным числом повторений
Сегодня мы познакомимся с оператором, который обеспечивает повторение цикла, управляемое переменной.
13.1. Цикл ПЕРЕСЧЕТ (прямой).
Формат оператора:
FOR переменная := выражение 1 ТО выражение 2 DO оператор ;
Переменная должна быть порядкового типа. Порядковыми называются все простые типы, значения которых можно расположить в возрастающем порядке. Из известных нам это: INTEGER, WORD, LONGINT, BYTE, CHAR. Выражение 1 и Выражение 2 должны быть того же типа, что и переменная. Чтобы цикл выполнился хотя бы раз выражение1 должно быть не больше выражения2.
Выполнение начинается с вычисления значений выражения1 и выражения2. затем переменная получает значение выражения1 и делается проверка, не превышает ли значение переменной выражения2. Если не превышает, выполняется оператор стоящий после служебного слова DO. После завершения оператора переменная получает следующее по порядку значение, и все повторяется, начиная с проверки.
Когда значение переменной становится равным выражению2, оператор выполняется последний раз.
ПРИМЕР 1. Напечатать ряд из повторяющихся чисел 20 в виде:
20 20 20 20 20 20 20 20 20 20
var i: byte;
begin
for I:=1 to 10 do write(20,’ ‘);
readln;
end.
Код программы (переменная используется не только для управления циклом но и для вывода на экран в качестве результата):
var i: byte;
begin
for I:=10 to 25 do write(I,’ ‘,I+0.4:0:1);
<при сложении целого I и вещественного 0.4 получаем
вещественный результат, значит надо выполнить его
форматирование при выводе на экран>
readln;
end.
13.2. Цикл ПЕРЕСЧЕТ (обратный).
Возможен вариант оператора, когда переменная принимает последовательно убывающие значения.
Формат оператора:
FOR переменная := выражение 1 DOWNТО выражение 2 DO оператор ;
В этом случае, чтобы цикл выполнился хотя бы раз, выражение1 должно быть не меньше выражения2. Например:
For c:=’z’ downto ‘а’ do writeln(с);
Тренировочные задания.
1.Напечатать столбиком:
а) все целые числа от 20 до 35;
б) квадраты всех целых чисел от 10 до b (значение d вводится с клавиатуры; b>=10);
в) третьи степени всех целых чисел от а до 50 (значение а вводится с клавиатуры; а =a).
3. Распечатать в столбик таблицу умножения на 7.
Решение задач. Цикл
Var I,n,f:word;
Begin
Write(‘Введите натуральное число’);
Readln(n);
F:=0;
For I:=2 to n div 2 do if n mod I=0 then f:=1;
If f=1 then writeln(‘число’,n:6,’ не простое’)
Else writeln(‘число’,n:6,’ простое’);
Readln
End.
Количество выполнения циклов можно еще уменьшить. Ведь на самом деле если число N делится на какое-то число А без остатка (кроме 1 и самого себя), то оно имеет и второй делитель В=N/A, т.е. если число не простое то его всегда можно записать как N=A*B. При возрастании первого делителя, значение второго будет уменьшаться. Получается, что достаточно проверить все числа от 2 до SQRT(n), но так как результат вычисления корня вещественный, а параметр цикла должен иметь целое значение, применим функцию определения целой части числа TRUNC, и получим:
For I:=2 to trunc(sqrt(n)) do if n mod I=0 then f:=1;
Задача 2.
Даны натуральные числа M и N. Определить, являются ли они взаимно простыми. Взаимно простые числа не имеют общих делителей, кроме 1.
Для решения задачи:
— вводим натуральные числа М и N;
— в цикле от 2 до наименьшего числа порождаем I и проверяем, является ли оно одновременно делителем М и N;
— в зависимости от значения F выводим результат.
Тренировочные задания.
1. Дан интервал натуральных чисел от N до М. Определить все простые числа в этом интервале.
2. Дано натуральное число N. Определить все простые числа не превосходящие N.
3. Дано натуральное число N. Разложить его на простые множители.
4. Дано натуральное число N. Определить, является ли оно совершенным. Совершенное число N равно сумме всех своих делителей, не превосходящих само N.
5. Дано натуральное число N. Определить, является ли оно автоаморфным. Автоаморфное число N равно последним разрядам квадрата этого числа: 5 25, 6 36, 25 625.
Обработка числовых последовательностей.
Сегодняшний урок мы посвятим обработке числовых последовательностей. Для этого обычно используется оператор цикла.
Алгоритмы для обработки последовательностей чаще относятся к одному из двух типов: поиск; проверка условий.
Для последовательностей характерно, что в каждый момент времени нам доступен только один элемент последовательности. Поэтому все алгоритмы строятся с учетом однократного последовательного просмотра.
Рассмотрим несколько программ. В каждой из них одновременно рассматривается только очередной член последовательности. Алгоритмы для решения таких задач называются алгоритмами с линейным поиском.
Задача 1.
Вводится последовательность из N целых чисел. Найти сумму всех отрицательных чисел.
Код программы.
Var old, new: real;
K: integer;
Begin
Write(‘введите число’);
Readln(old);
Write(‘введите число’);
Readln(new);
K:=0;
Repeat
If new*old 0 then writeln (‘Последовательность меняет знак ‘,k,’ раз’)
else writeln (‘Последовательность не меняет знак ‘);
readln;
end.
Тренировочные задания.
1. Вводится последовательность из n произвольных чисел. Определить, сколько раз последовательность меняет знак.
2. Вводится последовательность чисел, 0-конец последовательности. Определить, содержит ли последовательность хотя бы два равных соседних числа.
3. Вводится последовательность чисел, 0-конец последовательности. Найти два наименьших числа.
4. Вводится последовательность из N целых чисел. Найти наибольшее из всех отрицательных чисел.
5. Вводится последовательность из N целых чисел. Найти, сколько в ней нулей.
Разбор заданий урока.
3. Дано натуральное число N. Разложить его на простые множители.
4. Дано натуральное число N. Определить, является ли оно совершенным. Совершенное число N равно сумме всех своих делителей, не превосходящих само N.
Var n,i,sum:word;
Begin
Write(‘ Введите натуральное число ‘);
Readln(n);
Sum:=0;
for i:=1 to n div 2 do if n mod I=0 then sum:=sum+i;
If sum=n then writeln(‘ число ‘,n,’ совершенное ‘)
Else writeln((‘ число ‘,n,’ не совершенное ‘ );
Readln
End.
5. Дано натуральное число N. Определить, является ли оно автоморфным. Автоморфное число N равно последним разрядам квадрата этого числа: 5 25, 6 36, 25 625.
Var n,r,m:word;
Begin
Write(‘Введите натуральное число’);
Readln(n);
M:=n; r:=1;
While m>0 do <в цикле определяем разрядность введенного числа (r)>
Begin
M:=m div 10;
R:=r*10;
End;
If (n*n mod r)=n then writeln(‘число ‘,N,’ автоморфно’)
Else writeln((‘число ‘,N,’ не автоморфно’ );
Readln
End.
Решение задач
Оставим пока числовые последовательности, их существует большое многообразие и позднее мы к ним вернемся. А сейчас попробуем решить следующую задачу:
Var x: byte;
Begin
Write(‘ введите число от 1 до 7’);
Readln(x);
If x=1 then writeln(‘понедельник’);
If x=2 then writeln(‘вторник’);
If x=3 then writeln(‘среда’);
If x=4 then writeln(‘четверг’);
If x=5 then writeln(‘пятница’);
If x=6 then writeln(‘суббота’);
If x=7 then writeln(‘воскресенье’);
Readln
End.
В таком случае лучше подойдет оператор ВАРИАНТА (или ВЫБОРА).
Выражение порядкового типа вычисляется, и его значение отыскивается в одном из списков констант. После этого выполняется соответствующий оператор. Если значение выражения не совпало ни с одной из меток, то выполняется оператор из строки ELSE. Cокращенная форма оператора не содержит ELSE. Метки оператора варианта могут быть константами любого типа, но их тип должен совпадать с типом выражения.
Тогда код нашей программы будет выглядеть иначе:
Var x: byte;
Begin
Write(‘ введите число от 1 до 7’); Readln(x);
Case x of
1: writeln(‘понедельник’);
2: writeln(‘вторник’);
3: writeln(‘среда’);
4: writeln(‘четверг’);
5: writeln(‘пятница’);
6: writeln(‘суббота’);
7: writeln(‘воскресенье’);
end;
Readln
End.
CASE I OF
‘0’..’9′:writeln(‘цифра’);
ELSE writeln (‘не цифра’)
END;
Задача. Для целого числа K от 1 до 99 напечатать фразу «Мне k лет», учитывая при этом, что при некоторых значениях K слово «лет» надо заменить на слово «год» или «года». Например, 11 лет, 22 года, 51 год. (Данное решение можно улучшить используя дополнительно условный оператор. Попробуйте.)
var k:byte;
begin
write(‘Введите число лет’); readln(k);
case k of
1,21,31,41,51,61,71,81,91:writeln(‘Мне ‘,k,’ год’);
2..4,22..24,32..34,42..44,52..54,62..64,72..74,82..84,92..94:writeln(‘Мне ‘,k,’ года’);
else writeln(‘Мне ‘,k,’ лет’);
end;
readln;
end.