русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оператор перехода


Дата добавления: 2014-11-27; просмотров: 1349; Нарушение авторских прав


имеет вид goto p,

где р - метка, которой помечен некоторый иной оператор в программе (означает перейти). Предназначен для нарушения естественного порядка выполнения операторов. Например, goto 11 передаст управление оператору 11: writeln.

В качестве меток допускается использовать числа от 1 до 9999.

Метка объявляется, как правило, сразу до или после описания переменных. Например,

var n: integer;

label 1;

Пример программы№4

 

РАЗРАБОТАТЬ программу, использующую оператор перехода, условный оператор и генератор случайного числа для отгадывания случайного числа от 0 до 5 с выставлением оценки, зависящей от попытки отгадывания.

 

Var a,b,c: integer;

label 1,2;

Begin

c:=6;

Randomize;

a:=random(5);

1: writeln (‘Vvedite chislo ot 0 do 5’);

read(b);

c:=c-1;

If c<0 then goto 2

else if a<>b then goto 1

else writeln (‘Vasha ocenka za ugadivanie - ’,c);

2: end.

Пример программы№5

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

 

Program Diskrim;

var a,b,c,D,x1,x2:real;

label 1,2;

begin

writeln;

writeln ( 'Vvedite a' );

read(a);

writeln ( 'Vvedite b' );

read (b);

writeln ( 'Vvedite c' );

read (c);

D:=sqr(b)-4*a*c;

If D<0 then goto 1 else

x1:=(-b+sqrt(D))/(2*a);

x1:=(-b-sqrt(D))/(2*a);

if D=0 then writeln('Odin koren x1=',x1)else

writeln('Dva kornya - x1=',x1,' x2=',x2);

goto 2;

1:writeln ( 'Korney net');

2:end.

 

Пример программы№6

Определить принадлежность некоторого действительного числа х одному из двух отрезков [а, b] или [c, d]. Если х принадлежит одному из этих отрезков, то переменной q присвоить значение True. в противном случае – False.



Program Primer 1;

Var a, b, c, d, x: real;

q: boolean;

Begin

write ('Введите x, a, b, c, d ==>');

readln (x, a, b, c, d);

q:=(a<=x)and(x<=b)or(c<=x)and(x<=d);

writeln ('Число принадлежит? ', q);

End.

Лабораторная работа №3ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ

Цикл с условием - оператор WHILE

Оператор цикла WHILE, известный как оператор цикла с предуслови­ем, имеет вид:

while <условие> do begin

{тело цикла}

end;

При выполнении этого оператора сначала вычисляется некоторое логическое выражение <условие>, в слу­чае истинности которого выполняется оператор {тело цикла} (являющийся, как правило, составным оператором). После этого вычисление условия, его проверка и выполнение оператора повторяются до тех пор, пока вы­ражение <условие> не будет истинным. Затем управление передается следующему (после WHILE) оператору в программе. Использованные здесь ключевые слова WHILE и DO имеют смысл пока и выполнять соот­ветственно.

Пример№1Предположим, даны числа X и Y (больше нуля). Требуется получить все члены бесконечной последовательности X, X2, X3, …, которые меньше Y.

 

Program STEPEN;

Var x, y, z: real;

Begin

Writeln (‘Vvedite znacheniya X i Y’);

read (x,y);

z:=x;

while z<y do

begin

z:=z*x;

writeln (z);

end;

End.

Пример№2Cоставление таблицы функции y = a3/(a2+x2) для х, принадлежащих отрезку [-1; 1] с шагом 0.1. Так как параметр цикла типа for должен быть целочисленным, удобнее использовать цикл while, в котором значение x можно изменять при каждом шаге на х = 0.1.

program cycl_while;

uses crt; {вызов модуля Crt для управления режимом экрана}

var

a, x, y : real ; i : integer;

begin

clrscr ; {процедура очистки экрана из модуля Crt}

writeln('Введите а ' ); readln(a);

x:= -1.; writeln (' x ', ' y ');

while do x<1.05 begin

y:= sqr(a)*a/ (a*a+x*x);

writeln (x:6:2, y:8:4);

x:=x+0.1

end

end.

Оператор REPEAT

 

Оператор цикла REPEAT, известный как оператор цикла с постусло­вием, имеет вид:

repeat s until р;

При выполнении этого оператора сначала выполняется тело цикла (S), затем вычисляется некоторое логическое выражение Р (условие); в случае ложности которого вновь вы­полняется тело цикла. Затем выполнение тела цикла, вычисление усло­вия Р и его проверка повторяются до тех пор, пока выражение Р не ста­новится истинным. После этого управление передается следующему (за REPEAT) оператору в программе. Использованные здесь зарезерви­рованные слова REPEAT и UNTIL имеют смысл повторять и пока не(до) со­ответственно.

Оператор цикла REPEAT отличается от оператора WHILE, во-первых, тем, что здесь условие проверяется после выполнения тела цикла. Ины­ми словами, гарантируется хотя бы однократное его выполнение. Во-вторых, оператор REPEAT выполняется до тех пор, пока условие равно FALSE, и управление передается следующему (за REPEAT) оператору, ко­гда условие становится равным TRUE (для оператора WHILE имеет ме­сто обратная зависимость).

Даже если условие Р равно TRUE с самого начала, тело цикла выпол­нится хотя бы раз. Если условие Р тождественно FALSE (repeat s until false), цикл будет бесконечным.

Для того чтобы понять разницу между операторами цикла WHILE и REPEAT, рассмотрим соответствующие фрагменты программ, вычис­ляющих степени числа 3 в диапазоне между 1 и 300.

 

Цикл WHILE Цикл REPEAT
а:=1; while a<300 do begin writein(a); а:=а*3 end; а:=1; repeat writein(a); а:=а*3 until a>=300

 

Прежде всего бросается в глаза, что условия повторения цикла для двух случаев противоположны. Это объясняется тем, что в операторе WHILE цикл выполняется, пока условие не примет значение FALSE, а в операторе REPEAT — пока условие не примет значение TRUE

Также следует обратить внимание, что тело цикла REPEAT не требу­ется заключать в операторные скобки BEGIN.. END. Если в операторе WHILE после ключевого слова DO выполняется единственный оператор (и если требуется циклически выполнять несколько действий, прихо­дится несколько операторов объединять в составной оператор), то в операторе REPEAT между ключевыми словами REPEAT и UNTIL можно ввести любое количество операторов, без необходимости заключать их в операторные скобки.

Наконец, внимательный читатель может заметить, что в операторе REPEAT после последнего оператора в теле цикла нет точки с запятой. Это еще одна особенность оператора REPEAT — перед ключевым словом UNTIL точка с запятой необязательна.

 

Пример№3 Сгенерировать случайное число а от 0 до 10. Вывести на экран значение а. Если а>5, то рассчитать значение Xa с использованием оператора While … do …, если а<5, то рассчитать значение Ya с использованием оператора Repeat … until … . Величины X и Y вводить с клавиатуры.

 

var a,x,y,b,w,z:real;

begin

writeln ('Vvedite velichinu x');

read(x);

writeln ('Vvedite velichinu y');

read(y);

randomize;

a:=random(20);

b:=1;

z:=x;

w:=y;

writeln ('a ravno',a);

if a>10 then

begin while b<a do begin x:=z*x; b:=b+1 end; begin writeln('X v stepeni',a,'ravno',x); end; end

else

begin repeat begin y:=w*y; b:=b+1; end until b=a; writeln('Y v stepeni',a, 'ravno',y); end;

end.

 

Оператор FOR

 

Оператор цикла FOR, известный как оператор цикла с параметром, имеет вид:

for i=a to b do s;

При выполнении этого оператора сначала вычисляется некоторое начальное значение А, которое присваивается переменной I, называе­мой параметром цикла. Затем вычисляется конечное значение В и про­веряется, имеет ли место равенство I=В. Если равенства нет, выполня­ется оператор S, который может быть составным, и переменная I увели­чивается на единицу. После этого проверка (не равен ли параметр конечному значению), выполнение оператора S и увеличение перемен­ной I на единицу выполняются циклически до тех пор, пока не наступа­ет равенство I=В. Параметр цикла I, а также начальное и конечное зна­чения (А и В) могут принадлежать любому порядковому типу (например, Integer или Char). (Но при этом все они должны быть одного типа.) Если начальное значение превышает или равно конечному значению с само­го начала, оператор S не выполнится ни разу.

Использованные здесь зарезервированные слова FOR, TO и DO име­ют смысл от, до и выполнять соответственно.

Оператор цикла FOR имеет такие особенности:

• в теле цикла запрещается явно изменять значение параметра цикла (с помощью оператора присваивания, например);

• по завершении работы оператора цикла FOR, значение параметра

(I) считается неопределенным. Возможна и другая форма оператора цикла с параметром:

for i=a downto b do s;

Здесь, чтобы выполнялся оператор S, начальное значение А должно превышать конечное значение В. Кроме того, в этом случае параметр I с каждым циклом уменьшается на единицу, пока не становится равным конечному значению В.

Оператор цикла с параметром следует использовать тогда, когда за­ранее точно известно, сколько раз должно быть выполнено тело цикла.

Вот примеры оператора цикла с параметром:

for i:=l to 5 do x:=sqr(x);

for i:=z downto a do write (i);

В первом примере значение переменной Х возводится в квадрат, затем полученная величина присваивается переменной Х— и так пять раз.

Во втором примере оператор цикла с параметром использован для вывода букв латинского алфавита в обратном порядке (с z по а). Дело в том, что тип Char является порядковым, причем буквы начала алфави­та (как значения типа Char) считаются меньше букв, взятых в конце ал­фавита. Не будет, например, ошибочным неравенство А<В

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

Цикл WHILE Цикл FOR
line:=l while line<n do begin writeln; line:=line+1 end; for line=l to n do writeln

 

Если переменная Line объявлена (в разделе описания переменных) как принадлежащая типу Integer, оператор FOR выведет на экран N пус­тых строк. Реализация задачи с помощью оператора FOR выглядит проще, поскольку здесь нет нужды в операторах присваивания line:=l и line:= line+1.

Пример№4: Вывести на экран 20 строк с символами ********************

var a,n,i: integer;

begin

i:=1;

n:=20;

for a:=i to n

do writeln('*********************************************');

end.

Пример№5:

Ввести с клавиатуры число от 2 до 10 и выдать ответ в виде степени введенного числа от 2 до 10. Например:

«2.00 в степени 2 равно 4.00

2.00 в степени 3 равно 8.00

……………………………..

2.00 в степени 10 равно 1024».

 

Пример данной программы.

var a,b,c:real;

i:integer;

begin

read (b);

c:=b;

for i:=1 to 9 do

begin

c:=b*c; write (b, ' v stepeni ', i+1, ' ravno');

writeln (c); end;

end.

Пример№6

Составить программу, печатающую таблицу значений функции у=sqrt(x) на отрезке [0,9] с шагом 1.

 

program t;

var x: integer;

begin

write('x', ' ':4);

for x := 0 to 9 do write(x:6);

writeln;

for x := 1 to 68 do write('–');

writeln;

write('sqrt(x)', ' ');

for x := 0 to 9 do

writ
Лабораторная работа №4
ПОСЛЕДОВАТЕЛЬНОСТИ

 

 

Пример№1: Предположим, даны числа X и Y (больше нуля). Требуется получить все члены бесконечной последовательности X, X2, X3, …, которые меньше Y.

Program STEPEN;

Var x, y, z: real;

Begin

Writeln (‘Vvedite znacheniya X i Y’);

read (x,y);

z:=x;

while z<y do

begin

z:=z*x;

writeln (z);

end;

End.

Пример№2:

 

 

Пример№3

Пример цикла типа repeat ... until.Определить число n, при котором сумма квадратов натурального ряда чисел от 1 до n не превысит величину K, введенную с клавиатуры. Т.е.,

, где
.

program sum_sq; {Сумма квадратов натурального ряда } uses crt; var k, s, n : integer; begin clrscr ; writeln( 'Введите K' ); readln (k); s:=0; n:=1; repeat s :=s+n*n; n := n+1; until s > k; writeln ('N= ', n : 3, ' s= ' , s : 5 ); end.

Пример№4

Вычислить первые 20 членов последовательности чесел Фибоначчи:
u1=1; u2=2; u(n)=u(n-1)+u(n-2), а также значение золотого сечения V(n)=u(n)/u(n-1)

const nmax = 20; var i:integer; u1,u2,u3:integer; v:real; beginu1:=1;u2:=2;v:=u2/u1;writeln('u(1) = ',u1);writeln('u(2) = ',u2,' v(2) = ',v:2:2);for i:=3 to nmax do begin u2:=u2+u1; u1:=u2-u1; v:=u2/u1; writeln('u(',i,') = ',u2,' v(',i,') = ',v:2:2);end;readln;end. Пример№5 const nmax = 20; {Число Фибоначчи по заданному n}function fib(n:integer):integer;beginif (n=1) then begin fib:=1;exit;end;if (n=2) then begin fib:=2;exit;end;fib:=fib(n-1)+fib(n-2);end; {Значение золотого сечения по заданному n}function sech(n:integer):real;beginsech:=fib(n)/fib(n-1);end; var i:integer; beginwriteln('u(1) = ',fib(1));for i:=2 to nmax do writeln('u(',i,') = ',fib(i),' v(',i,') = ',sech(i):2:2);readln;end.

 

Пример№6

С клавиатуры вводятся целые положительные числа п, р и а. Составить программу для вычисления заданного количества членов последовательностей п , а , n!. Вывести на экран полученные значения.

Решение. Будем использовать переменную power (степень) для вычисления степенной функции п ; переменную exponent (показатель) для вычисления показательной функции а и переменную factor (множитель) для вычисления факториала п!.
Программы состоят из:
• Блока описаний, где указываются используемые модули, используемые переменные и их типы;
• Тела программы, включающего;
— очистку экрана;
— ввод данных с клавиатуры;
— вычисление элементов последовательности посредством рекуррентных соотношений, стартовые значения переменных таковы:
power = 1, exponent = 1, factor = 1,
формулы для общего члена
poweri = poweri-11 • п,
exponent
i = exponenti-11• n,
factor
i = factori-11 • i;
вывод результатов на экран.
В программах переменные п, р и а — целого типа integer (для неотрицательных целых чисел диапазон их изменения от 0 до 32 767); переменные power, exponent, factor — действительные числа с по крайней мере 6—7 верными знаками после запятой (для положительных чисел в допустимом для типа диапазоне, например от 1,4 • (10-45) до 3,4 • (1038) ). Используемые типы данных имеют названия single, real, float в языках Бейсик, Паскаль, Си соответственно. При выходе какой-либо переменной за пределы диапазона объявленного типа появляется сообщение об ошибке переполнения (overflow).
Форматированный вывод результатов работы программ на всех языках программирования одинаков для примера, где п= 10, р=3, а= 3. Имеем: n = lO = 1000, а = 3^10 = 59 049, n! == 10! = 3 628 800.

{Блок описаний}
uses crt;
var a, i, n, p : integer;
power, exponent, factor: real;
{Тело программы}
begin
{очистка экрана, ввод данных с клавиатуры}
clrscr;
write ( 'Введите число n = ' ); readln(n);
write ( 'Введите степень р = ' ); readln(р);
write ( 'Введите основание показательной функции а = ' ); readln (а);
{вычисление элементов последовательности посредством рекуррентных соотношений}
power := 1; exponent := 1; factor ;= 1;
for i := 1 to p do power := power * n;
for i := 1 to n do
begin
exponent := exponent * a;
factor := factor * i
end;
{вывод результатов на экран}
writeln ( 'power= ', power:1:1,
'exponent= ',exponent: 1:1,
'factor=', factor:1:1 );
readln
end.

Пример№7Составить программу вычисления n!.

Вариант 1

program fact1;

var n, i, p: integer;

begin

write('n='); readln(n);

p: = 1 ;

for i: = 1 to n do p := p∗i;

write('n! =', p)

end.

Вариант 2

program fact2;

var n, i, p: integer;

begin

write('n='); readln(n);

p =: 1;

i := 0;

while i < n do

begin

i := i + 1; p := p∗i

end;

write('n!=', p)

end.

Вариант 3

program fact3;

var n, i, p: integer;

begin

write('n='); readln(n);

p := 1 ;

i := 0;

repeat

i := i + 1; p := p∗i

until 1 >= n;

write('n!=', p)

end.

Пример№8

Не используя стандартные функции (за исключением abs), вычислить с точностью до 0.0001 функцию y=f(x). Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше 0.0001, все последующие слагаемые можно уже не учитывать. Привести и значение функции у, найденное с помощью стандартных функций.

 

 

program f1;

var x, y, n, u: real;

begin

write('x='); readln(x);

y: = 1; {задается начальное значение для суммы}

n: = 1; {номер слагаемого : y=1–u1+u2–...}

u: = 1; {un =un-1(–x2)/(2n – 1)2n)}

repeat

u: = –u*x*x/((2*n – 1)*2*n);

y: = y + u; n:= n + 1

until abs(u) < 0.0001;

write('полученное y=',y:2,:4,'стандартное x=', cos(x))

end.

program f2;

var x, y, n, u: real;

begin

write('x='); readln(x);

y: = 1; {задается начальное значение для суммы}

n: = 1; {номер слагаемого : y=1–u1+u2–...}

u: = 1; {un =un-1(–x2)/(2n – 1)2n)}

while abs(u)>=0.0001 do

begin

y: = y + u;

u: = –u*x*x/((2*n–1)*2*n);

n: = n+1;

end;

write('полученное x=',x:8:4,'стандартное x=',cos(x):8:4)

end.

Пример№9

 

Дана непустая последовательность положительных вещественных чисел, за

которой следует отрицательное число. Составить программу вычисления

среднего арифметического этих чисел.

program s1;

var x, s: real; n: integer;

begin

write('x1='); readln(x);

n := 0; s := 0;

repeat

s := s + x;

n := n + 1;

write('x', n + 1, '='); readln(x);

until x < 0;

write('cp. арифм. =', s/n)

end.

program s2;

var x, s: real; n: integer;

begin

write('x1='); readln(x);

n := 0; s := 0;

while x >= 0 do

begin

s := s + x;

n := n + 1;

write('x', n + 1, '='); readln(x)

end;

write('cp. арифм. =', s/n)

end.

Пример№10

Дано целое n > 0. Составить программу, печатающую все простые числа из

диапазона [2, n].

 

program p1;

var n, m, k, p: integer;

begin

write('n='); readln(n);

for m := 2 to n do

begin

p := 0;

for k := 2 to trunc (sqrt (m)) do

if m mod k = 0 then p := 1;

if p = 0 then write(m,' ')

end

end.

program p2;

var n, m, k: integer;

label 1;

begin

write('n='); readln(n);

for m := 2 to n do

begin

for k := 2 to trunc(sqrt(m)) do

if m mod k = 0 then goto 1;

write(m, ' ')

1: end

end.

program p3;

var n, m, k: integer; t: boolean;

begin

write ('n='); readlln(n);

for m := 2 to n do

begin

k := 2;

repeat

t := m mod k = 0;

k := k + 1

until t or (k> = trunc(sqrt(m));

if not t then write (m, ' ')

end

end.



<== предыдущая лекция | следующая лекция ==>
Условные операторы | Шаг 1: Авторизация на сайте


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.571 сек.