Пример написания программы в паскале

В программировании часто возникают ситуации, когда одну и ту же группу операторов, реализующих определенную цель, требуется повторить без изменений в нескольких местах программы. Для решения данной проблемы используют подпрограммы.
Подпрограмма — именованная группа операторов, которую можно вызвать для выполнения несколько раз из различных мест программы.
В языке Паскаль существую два вида подпрограмм: процедуры и функции.
Главное отличие процедур от функций заключается в том, что результатом функций является единственное число.

Конструирование алгоритма «сверху вниз»

При конструировании достаточно сложного алгоритма логично разбивать его на ряд более простых задач. Сначала записывается основной алгоритм. В нем записываются обращения к вспомогательным алгоритмам (подпрограммам), которые позволят решить отдельные, более простые задачи.

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

[01] Программа «Hello, World!». Язык программирования Паскаль


— возвращать управление тому алгоритму, из которого он был вызван. После того как завершится выполнение вспомогательного алгоритма, вызвавший его алгоритм должен продолжить работу с той точки, в которой он был прерван;
— иметь возможность вызывать другие алгоритмы;
— иметь достаточно малые размеры.

В языке Паскаль существует два вида подпрограмм: Процедуры и функции в Паскале объявляются в разделе описания за разделом переменных: процедура (PROCEDURE ) и функция ( FUNCTION ).

Параметры, записываемые в обращении к подпрограммам, называются фактическими ; параметры, указанные в описании подпрограмм — формальными . Фактические параметры должны соответствовать формальным по количеству, порядку следования и типу. Параметры, объявленные в основной (главной) программе, действуют в любой подпрограмме и называются глобальными . Параметры, объявленные в подпрограмме, действуют только в этой подпрограмме и называются локальными .

Процедуры

Процедуры используются в случаях, когда в подпрограмме необходимо получить несколько результатов. В языке Паскаль существует два вида процедур: процедуры с параметрами и без параметров.

Формат описания процедуры имеет вид:

procedure имя процедуры (формальные параметры);
раздел описаний процедуры
begin
исполняемая часть процедуры
end;

Например:
procedure korni (f: real; b,c:integer; var x1, x2:real; var k:integer);

Формальные параметры отделяются точкой запятой (однотипные параметры пишутся через запятую).

Вызов процедуры:
Обращение к процедуре осуществляется по имени процедуры, за которым могут быть указаны фактические параметры.
имя процедуры (фактические параметры);

Фактические параметры отделяются друг от друга запятой.

При вызове процедуры устанавливается взаимно однозначное соответствие между фактическими и формальными параметрами. После выполнения процедуры управление передается следующему, после вызова процедуры, оператору вызывающей программы.

Программа -тест на языке паскаль

Например:
korni (i,c,d,x,y,n);

Задача 1. Написать процедуру, которая печатает строку из N звездочек и переводит курсор на новую строку.

procedure pr (n:integer);
var i : integer ;
begin
for i :=1 to n do write (‘*’); writeln;
end;

Задача 2. Составьте программу, получения изображения в котором в первой строке 1 звездочка, во второй — 2, в третьей -3, . в строке с номером m — m звездочек.

Источник: pinskolimp.blogspot.com

Программа опроса и анкеты на pascal

Пример на ввод и вывод данных и условия в Pascal Программа для анкетирования на паскаль

В этой статье мы напишем программу на паскале, в которой будет организован ввод данных и вывод информации на экран, в программе будут использованы условия. Мы напишем программу на паскале для анкетирования, она будет опрашивать пользователя об его интересах и анализировать полученные ответы на предмет совпадения с ответами, заложенными в программе.
Рассмотрим структуру программы опроса на паскале.
Введём переменную k для подсчета количества совпавших предопределённых ответов и ответов пользователя
var k: integer;
var a1,a2,a3,a4: integer; // номера правильных ответов
Придаём переменным значения с номерами ответов
k:=0;
a1:=3;
a2:=1;
a3:=3;
a4:=2;
Спрашиваем имя пользователя при помощи операции readln() ввода информации с клавиатуры в паскале
writeln(‘Как вас зовут?’);
readln(n);
Задаём вопрос и получаем на него ответ пользователя
print(«Здравствуйте»,n)
writeln(‘Ваш любимый жанр литературы? 1- классика, 2 — фантастика, 3 — детективы,’);
readln(a);
Анализируем совпадения ответов, используя условный оператор if в паскале. Если ответ совпал с предопределенным, то увеличиваем число совпавших ответов на 1.
if (a = a1) then begin
k:=k+1;
end;
В конце программы проводим анализ числа совпадений и делаем вывод о схожести интересов.
if (k>=2) then begin
writeln(‘Мы с вами подружимся’);
end;
if (k <2) then begin
writeln(‘Мы с вами очень разные’);
end;
Полный текст программы опроса, анкеты на паскале
var k: integer; // количество совпавших ответов
var a1,a2,a3,a4: integer; // номера правильных ответов
var n: string;
var a: integer;
begin
k:=0;
a1:=3;
a2:=1;
a3:=3;
a4:=2;
writeln(‘Как вас зовут?’);
readln(n);
writeln(‘Ваш любимый жанр литературы? 1- классика, 2 — фантастика, 3 — детективы,’);
readln(a);
if (a = a1) then begin
k:=k+1;
end;
writeln(‘Ваш любимый жанр кино? 1- научная фантастика, 2 — документальные фильмы, 3 — сериалы,’);
readln(a);
if (a = a2) then begin
k:=k+1
end;
writeln(‘Ваш любимый цвет? 1- красный, 2 — синий, 3 — зелёный,’);
readln(a);
if (a = a3) then begin
k:=k+1
end;
writeln(‘Ваш любимый жанр музыки? 1- рок, 2 — рэп, 3 — классика,’);
readln(a);
if (a = a4) then begin
k:=k+1
end;
if (k>=2) then begin
writeln(‘Мы с вами подружимся’);
end;
if (k <2) then begin
writeln(‘Мы с вами очень разные’);
end;
end.
Перейти к содержанию курса по Pascal

Читайте также:
Для чего необходим режим сортировщик слайдов в программе powerpoint

Комментарии ( 0 )

Нет комментариев. Ваш будет первым!

Источник: itrobo.ru

Pascal: Примеры задач с решением

Анализируя данную формулу, видим, что аргумент функции sin очередного слагаемого отличается от предыдущего на 0.1. Поэтому для решения данной задачи можно составить следующий алгоритм:

с – очередное слагаемое;

i – аргумент функции;

  1. Обнуляем начальное значение переменной y (строка 5), в которой будем накапливать сумму.
  2. Начальное значение аргумента функции i равно 1 (строка 6).
  3. Проверяем, значение i меньше или равно 2, т.к. по заданию аргумент функции изменяется от 1 до 2 (строка 7)?
  4. Если «да», то определяем очередное значение функции (строка 9). Сохраняем его в переменной с. Если «нет», то расчет суммы закончен – переходим на шаг 78.
  5. Добавляем это слагаемое в сумму (строка 10).
  6. Увеличиваем значение аргумента i на 0.1 (строка 11).
  7. Переходим на шаг 3.
  8. Выводим результат на экран (строка 13).

var y , c , i : real ;
writeln ( ‘Полученное значение расчета формулы ‘ ,
‘y=sin1+sin1.1+sin1.2+ . +sin2 = ‘ ) ;
while i = 2 do
c : = sin ( i ) ;
writeln ( y ) ;

Второй вариант решения данной задачи.

Анализируя данную формулу, видим, что каждое слагаемое данной суммы можно рассчитать по формуле sin(1 + 0.1 * i), где i изменяется от 0 до 10. Поэтому для решения данной задачи можно составить следующий алгоритм.

i – параметр цикла;
y – сумма.

  1. Обнуляем начальное значение переменной y (строка 6), в которой будем накапливать сумму.
  2. Организуем цикл для определения суммы (параметр дан-ного цикла должен измениться от 0 до 10) .
  3. В данном цикле определяем очередное слагаемое по фор-муле и добавляем это слагаемое в сумму (строка 7).
  4. Выводим результат на экран (строка 8).

var y : real ;
i : integer ;
writeln ( ‘Полученное значение расчета формулы ‘ ,
‘y=sin1+sin1.1+sin1.2+ . +sin2 = ‘ ) ;
for i : = 0 to 10 do y : = y + sin ( 1 + 0.1 * i ) ;
writeln ( y ) ;

Задача 2.

Вычислить: y = 1*3*5* … *(2n–1), n>0;

var y : real ;
i , n : integer ;
writeln ( ‘Введите количество чисел’ ) ;
for i : = 1 to n do y : = y* ( 2 * i – 1 ) ;
writeln ( ‘Полученное значение y= ‘ , y )

Задача 3.

Дано натуральное число N. Разложить его на простые множители.

n – исследуемое число;

i, j – переменные циклов;

f – вспомогательный флаг.

Алгоритм решения задачи:

  1. Вводим значение переменной n. Т.к. пользователь может случайно ввести отрицательное число, то необходимо дать ему возможность для повторного ввода значения переменной n. По-этому организуем цикл (строки 3–6 текста программы). Лучше использовать цикл с пост проверкой условия (Repeat…Until). Тело цикла составляют два оператора: вывода на экран приглашения для ввода значения переменной n (строка 4) и оператор чтения с клавиатуры – для непосредственного ввода значения переменной n (строка 5). Данный цикл будет выполняться до тех пор, пока пользователь не введет любое положительное число (срока 6).
  2. Выводим на экран значение переменной n и начинаем формировать ответ. Ответ будет представлен в следующем виде (например, в качестве значения переменной n ввели 8): 8 = 1*2*2*2. Т.к. единица является простым множителем для любого числа, то выводим ее на экран (строка 7). В результате выполнения данной строки на экране появится: 8=1.
  3. Вспомогательной переменной f присваиваем значение false. Данная переменная нам будет необходима для определения, а были ли вообще найдены простые множители у заданного числа n. Запоминаем исходное значение переменной n в переменной j (строка 8).
  4. В цикле по переменной i начинаем порождение натуральных чисел, не превосходящих середины заданного числа n, для определения делителей данного числа n (строка 9). Данный цикл начали с 2, т.к. единицу мы уже учли (шаг 2 данного алгоритма). Т.к. в цикле For можно использовать только целые переменные, то воспользовались оператором целочисленного деления на 2 (n div 2). В данном цикле выполняем следующее. Определяем, является ли очередное i делителем числа n (в качестве n в данном цикле используем j). Для этого определяем остаток от деления j на i. Если остаток равен 0 (строка 10), т.е. число i является делителем j, то определяем, сколько таких делителей, уменьшая число n (строки 11–18). Переменной f присваиваем значение true (строка 12) – это означает, что у заданного числа n есть делители. Организуем цикл, пока остаток от деления j на i равен 0 (строка 13). В данном цикле выводим делитель на экран (строка 15) и уменьшаем заданное число, деля его целочисленно на делитель (строка 16). Повторяем цикл. После завершения этого цикла возвращаемся на цикл For (строка 9), изменяем i и повторяем те же действия для нового делителя.
  5. Если у числа нет делителей (оно является простым), то данное число можно разложить только на 1 и само себя. Вспомогательная переменная f и определяет, были ли делители у числа n. Если значение переменной f осталось false, то делителей не было, поэтому выводим само это число (строка 19).
Читайте также:
Программа где находится человек Айфон

var i , n , j : integer ; f : boolean ;
write ( ‘Введите натуральное число N= ‘ ) ;
until n 0 ;
write ( N : 6 , ‘=1’ ) ;
f : = false ; j : = n ;
for i : = 2 to n div 2 do
if j mod i = 0 then
while j mod i = 0 do
write ( ‘*’ , i ) ;
j : = j div i ;
if not f then writeln ( ‘*’ , n ) ;

Задача 4.

Даны натуральное число n и последовательность a1, a2,…,an вещественных чисел. Найдите знакочередующую сумму S = a1 –a2 + a3 –…+ (–1)n+1 an.

n – количество чисел;

a – очередное число;

p – булевский признак знака слагаемого;

i – переменная цикла;

S – знакочередующая сумма чисел.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем начальное значение S;
  2. булевская переменная p первоначально истинна, она будет указывать на знак слагаемого в сумме;
  3. последовательно считываем числа, и если p = true, то прибавляем очередное число к сумме S, иначе – отнимаем;
  4. на каждом шаге цикла значение p меняем на противоположное;
  5. выводим результат.

var n , i : integer ;
a , S : real ;
p : boolean ;
write ( ‘Введите длину последовательности n=’ ) ;
until n 0 ;
for i : = 1 to n do
write ( ‘Введите a=’ ) ;
if p then S : = S + a else S : = S – a ;
writeln ( ‘Знакочередующая сумма чисел S= ‘ , S ) ;

Задача 5.

Найти сумму первых n членов ряда y = 1 + x/2 + x2/3 + +x3/4+…, при |x|

n – количество членов ряда;

x – переменная ряда;

z – вспомогательная переменная;

i – переменная цикла;

Алгоритм решения задачи:

  1. вводим количество членов ряда n и переменную X;
  2. в цикле порождаем очередной член ряда и прибавляем его к сумме y;
  3. выводим результат.

var x , y , z : real ;
n , i : integer ;
writeln ( ‘Введите переменную ряда x, |x|<1, x=’ ) ;
write ( ‘Введите число членов ряда n=’ ) ;
until ( abs ( x ) 1 ) and ( n 0 ) ;
y : = 1 ; z : = 1 ;
for i : = 2 to n do
y : = y + z / i ;
writeln ( ‘Сумма первых n членов ряда y =’ , y ) ;

Задача 6.

Вводится последовательность из N целых чисел. Найти сумму всех отрицательных чисел.

n – количество чисел;

x – очередное число;

i – переменная цикла;

sum – сумма отрицательных чисел.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем на-чальное значение sum;
  2. последовательно считываем числа и, если число отрица-тельное, то прибавляем его к сумме sum;
  3. в зависимости от значения sum выводим результат.

var n , x , sum , i : integer ;
write ( ‘Введите длину последовательности n=’ ) ;
until n 0 ;
for i : = 1 to n do
write ( ‘Введите x=’ ) ; readln ( x ) ;
if x 0 then sum : = sum + x ;
if sum = 0 then writeln ( ‘Отрицательных чисел нет’ )
else writeln ( ‘Сумма отрицательных чисел sum= ‘ , sum ) ;

Задача 7.

Вводится последовательность из N целых чисел. Найти наибольшее число.

n – количество чисел;

x – очередное число;

i – переменная цикла;

max – наибольшее число.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем на-чальное значение max по первому числу;
  2. последовательно считываем числа и, если очередное чис-ло x больше max, то переприсваиваем значение max := x;
  3. выводим результат.
Читайте также:
Как в программе zbrush

var n , x , max , i : integer ;
write ( ‘Введите длину последовательности n=’ ) ;
until n 0 ;
write ( ‘Введите x=’ ) ;
for i : = 2 to n do
write ( ‘Введите x=’ ) ;
if ( x max ) then max : = x ;
writeln ( ‘Наибольшее из чисел max=’ , max ) ;

Задача 8.

Вводится последовательность целых чисел, 0 – конец по-следовательности. Найти два наименьших числа.

x – очередное число;

min1 – первое наименьшее число;

min2 – второе наименьшее число (min2>=min1).

Алгоритм решения задачи:

  1. устанавливаем начальные значения min1 и min2 по двум первым числам;
  2. последовательно считываем числа и, если очередное чис-ло x меньше или равно min1 (min1
  3. если x попадает в интервал от min1 до min2, то перепри-сваиваем только min2;
  4. выводим результат.

var x , min1 , min2 : integer ;
write ( ‘Введите x=’ ) ;
write ( ‘Введите x=’ ) ;
if x = min1 then
min2 : = min1 ;
if ( min1 x ) and ( x min2 ) then min2 : = x ;
write ( ‘Введите x=’ ) ;
until ( x = 0 ) ;
writeln ( ‘Два наименьших числа равны’ , min1 , ‘и’ , min2 ) ;

Задача 9.

Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить, является ли последователь-ность возрастающей.

old – предыдущее число;

new – рассматриваемое число;

Решение данной задачи строится от противного. Математи-чески для того, чтобы последовательность была возрастающей, для каждого очередного элемента new и предыдущего old должно выполняться условие new > old. Любое нарушение данного усло-вия приводит к тому, что последовательность не может быть возрастающей.

Алгоритм решения задачи:

  1. вводим два первых числа как old и new, задаем начальное значение флага f;
  2. в цикле ищем нарушение свойства членов возрастающей последовательности;
  3. пере присваиваем значение old:=new и вводим новое – new;
  4. в зависимости от флага выводим результат.

var old , new : real ;
f : boolean ;
write ( ‘Введите x=’ ) ;
readln ( old ) ;
write ( ‘Введите x=’ ) ;
readln ( new ) ;
if new = old then f : = false ;
write ( ‘Введите x=’ ) ;
readln ( new ) ;
until new = 0 ;
if f then writeln ( ‘Последовательность возрастающая’ )
else writeln ( ‘Последовательность не является возрастающей’ ) ;

Задача 10.

Даны натуральное n и последовательность веществен-ных чисел a1, a2,…, an. Сколько отрицательных чисел в начале по-следовательности (до первого неотрицательного)?

i – переменная цикла;

n – количество членов последовательности;

a – очередной член последовательности;

p – признак отрицательного числа в начале последователь-ности.

Алгоритм решения задачи:

  1. вводим длину последовательности, задаем начальное значение счетчика k;
  2. устанавливаем признак отрицательного цисла p=true;
  3. в цикле вводим очередной член последовательности;
  4. если это отрицательное число и до этого неотрицательных чисел не было, то увеличиваем значение счетчика на единицу;
  5. в противном случае, если член последовательности неот-рицателен, то полагаем p=false;
  6. в зависимости от k выводим результат.

var a : real ; p : boolean ;
k , n : integer ;
write ( ‘Введите длину последовательности n=’ ) ;
until n 0 ;
k : = 0 ; p : = true ;
for i : = 1 to n do
writeln ( ‘Введите число’ ) ;
if ( a 0 ) and p then k : = k + 1else
if a = 0 then p : = false
if k = 0 then writeln ( ‘отрицательных чисел в начале нет’ )
else writeln ( ‘последовательность начинается с ‘ , k , ‘ чисел’ )

Задача 11.

Дан прямоугольный бильярдный стол со сторонами А и В, где А, В – натуральные числа (бильярд Льюиса Кэролла). Из угловой лузы вылетает шар под углом 45 градусов к боковым стенкам, ударяется о борт, отскакивает, ударяется еще раз и т.д., пока не вылетит через одну из угловых луз. Рассчитать ко-личество отрезков в ломаной траектории шара. Считать угол падения равным углу отражения.

Данная задача решается с помощью стандартных функций выделения целой части от деления y на x (y div x) и выделения остатка y mod x. При прохождении шаром прямоугольного стола и отражении его от боковых сторон происходит увеличение числа отрезков траектории на два, а обратный путь вычисляется как y:=a–x+y mod x, где y – обратный путь для шара, a – длинная сторона стола, x – короткая сторона стола.

x, y – два натуральных числа (формальные параметры);

k – вспомогательная переменная (локальная переменная);

a – длинная сторона стола (глобальная переменная);

в основной программе:

a, b – два натуральных числа (глобальные переменные).

Алгоритм решения задачи:

  1. создаем описание функции bill;
  2. вводим два натуральных числа a и b (не кратные друг другу);
  3. вызываем функцию bill для определения количества от-резков;
  4. завершаем работу программы.

Источник: msbro.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru