Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программное.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
221 Кб
Скачать
☆

1 Задание № 1. Программирование линейных вычислительных процессов.

Цель: - закрепить понятия «синтаксис языка», «семантика языка», «структура программы», «тип данного»;

- сформировать умения и навыки программирования линейных вычислительных процессов;

- сформировать навыки изображения алгоритма программы в виде схемы.

Основы теории

Алфавит языка Паскаль

  • заглавные и строчные латинские буквы (A – Z и a-z);

  • символ подчеркивания (_ ), считающийся в языке буквой;

  • арабские цифры от 0 до 9;

  • специальные символы: +- * . =. , ; : @ ‘ ( ) [ ] { } # $ ^,

которые используются для построения лексем.

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

В Паскале различаются следующие классы лексем:

  • зарезервированные (ключевые) слова, смысл которых в языке строго фиксирован;

  • идентификаторы:

    1. стандартные (предопределенные), являющиеся директивами, типами и встроенными процедурами и функциями;

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

    3. изображения (числа, символьные строки и т.д.);

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

    5. разделители, используемые для наглядности текстов программ и специальные символы ( * ; = ( ) и другие).

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

СТРУКТУРА ПРОГРАММЫ.

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

Основной принцип : все именованные объекты (данные, процедуры, функции и др.), на которые имеются ссылки в программе должны быть предварительно объявлены.

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

Общая структура программы

PROGRAM <имя>; заголовок программы

USES <список модулей>; указание используемых модулей

LABEL <список меток>; определение меток

CONST A1=<выражение>;

A2: <> = <выражение>; задание констант

TYPE T1 =<вид типа>; введение нестандартных типов данных

VAR <список переменных >:<тип>; описание переменных

PROCEDURE описание процедур и функций

FUNCTION

BEGIN основная программа , в которой

Процедуры и функции должны

вызываться

<операторы>

END.

ЦЕЛЫЕ ТИПЫ ПАСКАЛЯ

Название типа

Идентификатор

Память(в байтах)

Диапазон значений

Короткое целое без знака

Byte

1

0-255

Короткое целое со знаком

Shortint

1

-128 -127

Целое без знака

Word

2

0- 65535

Целое со знаком

Integer

2

-32768 -32767

Длинное целое со знаком

Longint

4

-2147483648- 2147483647

Над целочисленными значениями определены основные операции:

+ , - , *, div , mod, /

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

С целыми значениями можно производить операции сравнения:

>, <, >=, <=, < >

ВЕЩЕСТВЕННЫЕ ТИПЫ

Название типа

Идентификатор

Типа

Диапазон значений

Значащие цифры мантиссы

Размер памяти (байт)

Вещественное одинарной точности

Single

1.5*10-45 -3.4*1038

7.. 8

4

Вещественное

Real

2.9* 10 -39– 1.7 * 1038

11..12

6

Вещественное двойной точности

Double

3.4*10 -324– 1.7 * 10308

15..16

8

Вещественное повышенной точности

Extended

3.4*10-4932- 1.1* 104932

19..20

10

Целое в формате вещественного

Comp

-263+1 – 263-1

19..20

8

С вещественными типами используются четыре арифметических операции: +, -, *, /, выдающие результат вещественного типа

Вычисление XY рекомендуется производить следующим образом:

  • Если Y – целое число, то через умножение, т.е. XY= X*X*...*X;

  • Если Y – вещественное значение, то XY = e Y* ln (x ) , т.е. на языке Паскаль: Exp( Y* Ln(X));

Логический тип данных описывается ключевым словом boolean, например:

Const a=true;

///////////

Const cil:Boolean=false;

/////////////////////////////////

Var t:boolean;

//////////////////////////

First_1:Boolean:

Переменная логического типа может принимать значения: либо логического выражения, либо логической переменной, либо значения false или true.

Символьный (литерный ) тип данных.

Переменные этого типа принимают значения из определенной упорядоченной последовательности символов, обозначающих алфавит компьютера. Список символов содержится в таблице ASCII кодов(АСКИ – код- американский стандартный код для обмена информацией). Номер, который имеет символ в таблице, называется кодом этого символа. Символ в памяти занимает 1 байт.

Кодовая таблица ASCII содержит 256 символов и делится на две части: основную и альтернативную. Первая часть содержит символы с кодами 0-127.

В эту группу входят:

      • Управляющие символы (коды 0-31), получающиеся при нажатии клави CTRL+<латинская буква>;

      • Пробел (код 32);

      • Арабские цифры(коды 48-59);

      • Прописные латинские буквы(коды 65 -90);

      • Строчные латинские буквы (коды 97-122);

      • Арифметические операции и специальные символы из алфавит Турбо Паскаля.

Для задания литерных констант наряду с классической формой (символ в апострофах) используется представление #<код>. Так запись ‘A’ эквивалентна #65, а ‘T’- #49.

Для распознавания символов могут пригодиться следующие неравентсва:

‘0’<=C<=’9’-символ С –цифра;

‘a’<=C<=’z’-символ С- строчная буква латинского алфавита;

‘A’<=C<=’Z’- символ С – прописная буква латинского алфавита.

С литерными значениями работают функции: Succ(C), Pred(C) и три функции преобразования Ord(c),Chr(код),Upcase( c).

Например, Ord(‘0’)=48; Chr(49)=’0’;Ord(‘A’)=65, Chr(65)=’A’, pred(‘b’)=’a’, pred(‘9’)=’8’, succ(‘8’)=’9’, upcase(‘y’)=’Y’(аналогично и для любого другого символа, отличного от строчной латинской буквы).

Объявление переменных символьного типа:

Var c1,c2,sim: char;

Const s=’A’; (или равносильно const s=#65)

НЕКОТОРЫЕ СТАНДАРТНЫЕ ФУНКЦИИ ЯЗЫКА ПАСКАЛЬ

Вызов функции

Тип аргумента

Тип результата

sqr (x)

Целые или вещ.

Совпадает с типом аргум.

abs (x)

- “ -

- “ -

Sqrt (x)

-“ -

Real

Sin (x)

- “ -

- “ -

Cos(x)

- “ -

- “ -

Arctan(x)

- “ -

- “ -

Ln (x)

- “ -

- “ -

Exp (x)

- “ -

- “ -

Trunc (x)

Веществ.типы

Longint

Round (x)

- “ -

Longint

Frac (x)

- “ -

Real

Int (x)

- “ -

- “ -

Pi

- “ -

- “ -

Random

- “ -

- “ -

Random(x)

Word

Word

Odd (x)

Целые типы

Boolean

Succ(x)

Любой порядковый

Совпадает с типом аргумента

Pred (x)

- “ -

- “ -

Low (x)

- “ -

- “ -

High (x)

- “ -

- “ -

Ord (x)

Литерный, булевский или перечислимый

Byte

Chr (x)

Char

Литерный

Upcase (x)

Char

Char

Алгоритм - это точное предписание, задающее вычислительный процесс, направленный на получение результатов соответствующих определенным входным данным.

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

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

Пример: Вычислить площадь треугольника со сторонами a,b,c по формуле Герона

S = O p(p-a)(p-b)(p-c) , где p = (a + b + c) / 2

  

Правила записи выражений в Паскале.

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

Порядок выполнения операций в выражении определяется :

  • Приоритетом операций;

  • Порядком расположения операций в выражении;

  • Наличием скобок.

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

Приоритет операций:

  1. вычисление функций;

  2. not;

  3. *,/,div, mod,and;

  4. +, -, or, xor;

  5. =,<>,>=,<=,>,<.

Оператор присваивания в Паскале имеет вид А:=С;

Где А – переменная любого типа за исключением файлового;

С- выражение, совместимое по типу с А.

Ввод данных в программе осуществляется при помощи следующих ператороов:

Read(a1,a2,…,an);

Readln(a1,a2,….,an);

Где а1, а2, …, аn- идентификаторы числовых, литерных или строковых типов.

Отличие операторов readln и read в том, что после считывания значения для последней переменной оставшаяся часть строки данных пропускается.

Например,

1 23 55 66 22

80 90

после считывания операторами readln(a,b,c); read(d,e);

переменные примут значения: a=1,b=23,c=55,d=80,e=90.

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

Read(a,b,c);read(d,e);

Переменные примут следующие значения.

a=1,b=23,c=55,d=66,e=22.

Вывод данных на дисплей осуществляется при помощи операторов

Write(b1,b2, .., bn);

Writeln(b1,b2,..,bn); .

Здесь b1,b2, .., bn – переменные, константы и выражения, имеющие любой стандартный или строковый тип.

Отличие этих двух операторов состоит в том, что после выполнения процедуры Write курсор на экране остается на строке вывода, во втором случае после вызова процедуры Writeln курсор на экране переводится на следующую строку.

ПРИМЕРЫ ЛИНЕЙНЫХ ПРОГРАММ

Рассмотрим простой пример программы на языке Pascal.

Программа вычисляет площадь круга.

program square;

Const

pi=3.1415926;

var

R, L, S : real;

begin

write ('Введите длину окружности :');

readln (l);

r:=l/(2*pi);

S:=pi*sqr(r);

writeln ('Площадь круга равна: ',S, 'кв.единиц');

end.

Пример1.

Найти произведение цифр заданного целого положительного четырехзначного числа N.

PROGRAM PR_1;

VAR

N,P :word;

N1, N2, N3, N4 : byte;

BEGIN

Writeln(‘ введите натуральное 4-х значное число’);

Readln (N); {ввод заданного числа}

N4:= N mod 10; { последняя цифра}

N1:= N mod 1000; { первая цифра}

N2:= N div 100 mod 10;{вторая цифра}

N3:= N div 10 mod 10; {третья цифра}

P:= N1*N2* N3*N4;

Writeln (‘ ‘,N :5, ‘ ‘, P:6);

Readln;

End.

Пример 2. Для заданного вещественного числа определить последнюю цифру его целой части и первую цифру дробной части

PROGRAM PR_2;

VAR

A: real; {исходное вещественное число}

B: longint;

C : real; {рабочая переменная}

BEGIN

Writeln (‘ Введите вещественное число ‘); { строка – приглашение к вводу}

Readln (A); {ввод числа}

B:= Trunc (A); {отбрасывание дробной части}

Writeln( ‘ Последняя цифра целой части‘, B mod 10);

C:= Frac( A); {выделение дробной части}

Writeln (‘ Первая цифра дробной части‘, Trunc (C*10));

Readln;

End.

Пример 3. Написать программу, которая печатает true или false в зависимости от того, выполняется или нет заданное условие:

Квадрат заданного трехзначного целого положительного числа равен кубу суммы цифр этого числа.

PROGRAM PR_3;

VAR

N1,N2, N3, S :byte; {}

N: word; {}

T: boolean; {}

BEGIN

Writeln (‘ ‘);

Readln (N);

N1:= N div 100;

N3:=N mod 10;

N2:= N div 10 mod 10;

S:=N1+N2+N3;

T:= Sqr(N)= Sqr (S) *S;

Writeln(T);

Readln;

End.

ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ К КОНТРОЛЬНОЙ РАБОТЕ

ЗАДАНИЕ №1

ЗАДАЧА 1.

  1. Присвоить целой переменной h третью от конца цифру в записи целого положительного числа k (например: k=130985, то h=9). (Нужно разработать программу, h := (K div 100) mod 10  )

  2. var k:integer; { заданное число }

  3. h:string; { третья цифра заданного числа }

  4. s:string; { число, представленное в виде строки символов }

  5. begin str(k,s); { преобразовали число в строку 13098 -> '13098' }

  6. h:=copy(s,length(s)-2,1) { выделили нужную цифру }

  7. end.

  1. Присвоить целой переменной d первую цифру из дробной части положительно вещественного числа (так, если x=32.975 то d =9).

  2. var x:real; { заданное число }

  3. d:integer; { первая цифра дробной части заданного числа }

  4. s:string; { число, представленное в виде строки символов }

  5. begin str(x,s); { преобразовали число в строку 32.597 -> '32.597' }

  6. d:=copy(s,pos('.',s)+1,1) { выделили нужную цифру }

  7. end.

  1. Присвоить целой переменной L сумму 2-х последних цифр целой части положительного вещественного числа (так, если x=143.57, то L=4+3=7).

  1. найти произведение 2-х первых цифр из дробной части положительного вещественного числа (так , если x=31.956, то P=9*5=45).

  2. #include <math.h> #include <stdio.h>

  3. int main(){    double x = 31.956;    double k;    double P = 0;    P = floor(modf(x, &k)*10) * floor(modf(x*10, &k)*10);    printf("Result is: %f", P); }

  1. Вычислить дробную часть среднего геометрического 3-х заданных положительных чисел.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <cstdlib>

#include <cstdio>

#include <iostream>

#include <math.h>

using namespace std;

 

int main(int argc, char** argv) {

    int a, b, c;

    float x;

    cout << "Введите a - "; cin >> a;

    cout << "Введите b - "; cin >> b;

    cout << "Введите c - "; cin >> c;

    x = pow(a * b * c, 1.0 / 3);

    printf("Дробная часть - %5.3f \n", x - int(x));

    return 0;

}

  1. Написать программу, которая для заданного А печатает следующую таблицу: А А3 А3 А

  2. Значениями литерных переменных С0,С1,С2, являются цифры. Присвоить целой переменной L число, составленное из этих цифр (С0=’1’,С1=’3’,С2=’5например, то L=135)/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

uses crt;

const zn:string[8]='01234567';//символы в СС 8

var s:string;//глобальные переменные число и строка

    r:longint;

procedure DecToOct;//10 в 8

begin

clrscr;

write('Введите целое число в СС 10 r=');

readln(r);

s:='';

while r>0 do

 begin

  s:=zn[r mod 8+1]+s;

  r:=r div 8;

 end;

writeln('Число в СС 8=',s);

readln

end;

 

procedure OctToDec;//8 в 10

var i,k,j:integer;

    f:longint;

begin

clrscr;

repeat

k:=0;

write('Введите целое число в СС 8 s=');

readln(s);

for i:=1 to length(s) do

if not(s[i] in ['0'..'7'])then

 begin

  writeln('Это не число в СС 8!, повторите ввод.');

  k:=1;

 end;

until k=0;

r:=0;f:=1;

for i:=length(s) downto 1 do

 begin

  r:=r+f*(ord(s[i])-48);

  f:=f*8;

 end;

writeln('Число в СС 10=',r);

readln

end;

 

var w:char;//локальная переменная для выбора действия

begin

clrscr;

repeat

clrscr;

writeln('Выберите направление перевода:');

writeln('1-из десятичной в восьмеричную');

writeln('2-из восьмеричной в десятичную');

writeln('другое - выход');

readln(w);

case w of

'1':DecToOct;

'2':OctToDec;

else exit;

end;

until not (w in ['1','2']);

end.

  1. Присвоить литерным переменным С0,С1,С2 левую, среднюю и правую цифры 3-х значного числа k.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include <stdio.h>

 #include <conio.h>

 char c1,c2,c0;

 int k,x,y,z;

 main()

 {

 clrscr();

 printf("vvedite k=");

 scanf("%d",&k);

 x=k / 100;

 y=k % 100 / 10;

 z=k % 10;

 x=(x)+48;

 y=(y)+48;

 z=(z)+48;

 c1=char(x);

 c2=char(y);

 c0=char(z);

 printf("\nc1=%c",c1);

 printf("\nc2=%c",c2);

 printf("\nc0=%c",c0);

 getch();

 return 0;

}

  1. Используя литерный вывод, вывести на экран значение 4-х значного целого положительного числа.

  2. Дано 3-х значное отрицательное число. Используя литерный ввод, ввести его посимвольно и присвоить целой переменной k.

  3. Дана последовательность литер, имеющая вид: d1+d2-d3*d4(di, i=1,4 – цифры). Вычислить значение выражения.

uses CRT;

function func(xx: Extended): Extended;

begin

func:=exp(-2*xx) - 2*xx + 1

end;

function dfunc(xx: Extended): Extended;

begin

dfunc := -2*exp(-2*xx) - 2

end;

CONST

eps0 : Real = 0.1;

deps = 10;

eps_count = 12;

x0 :Extended = 3;

VAR

r, r1: Extended;

count: array [1..eps_count] of Integer;

i, c: Integer;

ln10: Extended;

BEGIN

ClrScr;

ln10 := ln(10);

for i:=1 to eps_count do

begin

r1 := x0;

r := r1 - func(r1)/dfunc(r1);

c:=1;

while abs(r - r1) > eps0 do begin

r1 := r;

r := r1 - func(r1)/dfunc(r1);

{ writeLn(c,' ',r,' ',r1);}

inc(c);

{ if KeyPressed then Halt(0);}

end;

count[i]:=c;

WriteLn(r,' ',eps0:8,' ', count[i],' ',-ln(eps0)/ln10:8:0);

eps0 := eps0 / deps;

end;

END.

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

uses crt;

var c:char;

    w:real;

    i:byte;

begin

clrscr;

writeln('Введите число в формате -dd.dd');

w:=0;

i:=1;

repeat

c:=readkey;//читаем код клавиши

if (i=1) and(c='-') then//если первый и минус, нормально

 begin

  i:=i+1;

  write(c);

 end

else if(i=4)and(c='.') then//если четвертый и точка, нормально

 begin

  i:=i+1;

  write(c);

 end

else if(i in [2,3,5,6]) and(c in ['0'..'9']) then//если цифры и на месте

 begin

  write(c);

  i:=i+1;

  w:=w*10+(ord(c)-48);//умножаем число на 10 и прибавлям еще цифру

 end;

until i>6;

writeln;

w:=w/-100;//делим на -100

write(w:0:2);

readln

end.

  1. Используя только литерный ввод, ввести вещественное число, записанное в виде : d.ddE-d, и присвоить его вещественной переменной y.

  2. #include <math.h>

  3. #include <iostream>

  4. #include <conio.h>

  5. using namespace std;

  6. int n1,n2,n3,n4; // объявляем переменные

  7. char c1,c2,c3,c4;

  8. float y;

  9. int main()

  10. {

  11. cout<<"Vvedite d.ddE-d ";

  12. cin>>c1>>c2>>c2>>c3>>c4>>c4>>c4; // считываем строку

  13. n1=(int)c1-48; // преобразуем из char в int

  14. n2=(int)c2-48;

  15. n3=(int)c3-48;

  16. n4=(int)c4-48;

  17. y=(n1+n2*0.1+n3*0.01)*exp(-n4*log(10.0)); // переносим запятую

  18. cout<<"Otvet "<<y; // записываем ответ

  19. getch(); // задержка

  20. return 1;

  21. }

  1. Вывести 4-х значное отрицательное число в виде последовательности символов.

  2. repeat

  3. write('Введите 4х-значное число');

  4. readln(n);

  5. until(n>999)and(n<10000);

  6. write(n mod 10,n div 10 mod 10,n div 100 mod 10, n div 10);

ЗАДАЧА 2

Написать программу, в результате выполнения которой булевская переменная t получает значение TRUE, если выполняется заданное условие, и FALSE в противном случае (Оператор If не использовать).

  1. Введенный символ не является буквой латинского алфавита и символом «_»(подчеркивание);

  2. введенные символы А,В,С образуют целое трехзначное число;

  3. введенные символы А и В образуют выражение вида А+В или А-С , где А и С – цифры;

  4. из 2-х введенных символов только одна является цифрой;

  5. введенные символы С1, С2 образуют число кратное 3, но не кратное 9;

  6. введенные четыре символа образуют слово TRUE;

  7. квадрат заданное трехзначного числа равен кубу суммы цифр этого числа;

  8. введенное число является полным квадратом;

  9. введенное целое число является удвоенным нечетным;

  10. введенное целое число n является квадратом нечетного числа;

  11. введенное целое положительное четырехзначное число является полиндромом;

  12. среди цифр заданного целого трехзначного число есть одинаковые;

  13. среди первых цифр дробной части заданного положительного вещественного числа есть цифра 0.

  14. введенный символ, является прописной буквой русского алфавита.