Меню
Разработки
Разработки  /  Информатика  /  Уроки  /  Линейные программы

Линейные программы

Материал содержит задания для тренировки, примеры, задачи по линейному программированию.
11.09.2013

Описание разработки

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

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

Пример 1. Пешеход шел по пересеченной местности. Его скорость движения по равнине v1 км/ч, в гору — v2 км/ч и под гору — v3 км/ч. Время движения соответственно t1, t2 и t3 ч. Какой путь прошел пешеход?

1. Ввести v1, v2, v3, t1, t2, t3.

2. S1 := v1 * t1.

3. S2 := v2 * t2.

4. S3 := v3 * t3.

5. S := S1 + S2 + S3.

6. Вывести значение S.

7. Конец.

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

1) Арифметические выражения
Арифметические выражения строятся из имен переменных, констант, знаков операций и круглых скобок так, как это принято в математике. При вычислении их значений операции выполняются в порядке приоритета: *, /, DIV, MOD, а затем + и -. Операции одинакового старшинства выполняются слева направо.
Наряду с переменными и константами в арифметические выражения можно включать функции. При определении значения выражения, прежде всего, вычисляются значения входящих в него функций. В Паскале имеются следующие стандартные функции: - смотрите документ.

Аргумент функции обязательно заключается в скобки.
Выражение на Паскале, как впрочем, и на других языках программирования, записывается в одну строчку, а для сохранения порядка действий используются скобки. Все действия должны быть указаны. Например, 2Х + XY надо записать как 2*Х + Х*Y.

Задания для тренировки
1) Найдите значения переменных, если это возможно. Учтите, что число 4.0 является вещественным, т.к. оно имеет дробную часть, хотя и равную нулю.

Операции MOD и DIV можно выполнять только над целыми числами:
a) A:=21 DIV 5;    b) A:= 2 MOD 3
B:= 20 MOD 5     B:= 36.0 MOD 6
C:= 14 DIV 6.0    C:= 81 DIV 0
D:= 14 MOD 0     D:= 38 DIV 6
E:= 5 MOD 13     E:= 3 DIV 2

2) Найдите значения переменных, если это возможно:
a) A:=SQR(100)    b) A:=sqrt(9)
B:=sqrt(100)              B:=SQR(9)
C:=SQR(-10)             C:=SQRT(-9)
D:=SQRT(-10)          D:=SQR(-9)
E:=SQR(0.9)             E:=SQRT(0.0)
F:=SQRT(0)              F:=SQR(0.1)

3) Найдите значения переменных, если это возможно:
a) A:=ROUND(6.9)          b) A:=ROUND(15.39)
B:=ROUND(6.48)                 B:=ROUND(15.8)
C:=TRUNC(9.5)                    C:=TRUNC(-39)
D:=FRAC(9.5)                       D:=FRAC(39)
E:=INT(9.5)                           E:=INT(39)
F:=TRUNC(-17)                    F:=TRUNC(5.6)
G:=FRAC(17)                       G:=FRAC(-0.3)
H:=INT(-17)                         H:=INT(1.25)

2.. Обмен значениями..

Рассмотрим пример: Поменять местами значения переменных X и Y, не используя дополнительной переменной.

Первая мысль, приходящая в голову, это написать программу, похожую на эту:
A:= B;
B:= A;

Но эта программа работать не будет (в обеих переменных будет значение B).
Теперь поищем правильное решение. Обозначим начальное значение A за A1, B за B1. Тогда необходимо, чтобы по окончании работы программы A равнялось B1, а B - A1.

0) A=A1; B=B1;
1) Занесем в переменную A результат суммирования A и B (A := A + B):
A = A1 + B1; B = B1;
2) Занесем в переменную B разность A и B (B := A - B):
т.к. A = A1 + B1; то B=(А1+В1)-В = A1;
3) Занесем в переменную A разность A и B (A := A - B):
A = B1; B = A1;

Код программы:

Program prim_4;
Var a,b:integer;
Begin
Write('введите два числа ');
Readln(A,B);
A:=A+B;
B:=A-B;
A:=A-B;
Writeln('A=',A);
Writeln('B=',B);
Readln;
End.

3..Эффективные алгоритмы.
Вы уже знаете, что в Паскале отсутствует возможность возведения в степень, не считая квадрата. Поэтому для получения а^20 нужно а*а*а*а...*а 19 раз. Но если учесть, что результат умножения можно сохранить в промежуточной переменной, ответ можно найти за 5 действий.

Program prim_4;
Var a,b:real;
Begin
Write('введите число');
Readln(A);
В:=A*А; {получаем А во 2}
B:=В*В; {получаем А в 4}
В:=A*B; {получаем А в 5}
B:=В*В; {получаем А в 10}
B:=В*В; {получаем А в 20}
Writeln('A в 20 степени=',В:0:2);
{Вместо указания ширины поля для вывода числа лучше ставить 0, тогда компилятор отведет столько позиций под целую часть, сколько получилось в ответе, а для дробной части я посчитала возможным оставить 2 позиции}
Readln
End.

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

Задание для тренировки.

1) Поменяйте между собой значения трех переменных X, Y и Z по схеме тройного квартирного обмена: Х®Y®Z®X.

2) Присвойте переменной N ее собственное значение, увеличенное в N раз.

3).Дано вещественное число А. Не пользуясь никакими арифметическими операциями, кроме умножения, получить:
а) А^15 за пять операции;
б) А^19 за пять операции;
в) А^21 за шесть операции;
г)А^28 за шесть операции;

4. Целочисленная арифметика. Задачи на целочисленное деление.
В программировании существует целый класс задач, где действия производятся только с целыми числами. При решении подобных задач обычно используются операции над целыми MOD и DIV. Сегодня мы познакомимся с задачами на целочисленное деление.

Задача. Дано расстояние в сантиметрах. Найти число полных метров в нем.

Код программы:

Program prim_4;
Var a,b:integer;
Begin
Write('введите расстояние в сантиметрах');
Readln(a);
b:=a div 100;
Writeln(b,' метров ');
Readln
End.

Задания

1.Установите соответствие между служебными словами и названиями разделов  программы:

Var                               

Program

Uses

Begin … end

Раздел операторов

Раздел имени программы

Раздел описания переменных

Раздел описания библиотечных модулей

2.  Расположите в правильном порядке строки программы, вычисляющей периметр и площадь параллелограмма:

1)   S:=a*h;       

 

2)   end.

 

3)   program  pr;

 

4)   p:=2*(a+b);

 

5)   Uses crt;

 

6)   var a,b,h,p,s: integer;

 

7)   readln;

 

8)   Writeln(‘p=’,p,’   s=’,s);

 

9)   a:=6;b:=3;h:=4;

 

10)   clrscr;

 

11)   begin

 

3.  Дан текст программы в таблице с ошибками:

исправьте ошибки в программе;

что выведется на экран в результате выполнения программы? – смотрите документ

Задания для тренировки.
1.Дана масса в килограммах. Найти число полных центнеров в ней.
2.Дана масса в килограммах. Найти число полных тонн в ней.
3.Дано расстояние в метрах. Найти число полных километров в нем.
4.Дан прямоугольник с размерами 543х130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него?

5.Напишите программу, которая запрашивает два числа, находит остаток от деления первого на второе и выводит результат.

6. Дана сторона квадрата a. Найдите его периметр P=4*a

7.Даны стороны прямоугольник a и b. Найти его площадь S = a*b и периметр P = 2*(a + b).

8. Дан диаметр окружности d. Найти ее длину L = ?*d. В качестве значения ? использовать  3.14.

9.*Дано целое число k (1 <= k <= 365). Присвоить целочисленной величине n значение 1, 2,...,6 или 0 в зависимости от того, на какой день недели (понедельник, вторник, ..., суббота или воскресенье) приходится k-й день года, в котором 1 января - понедельник.

10. *Дано вещественное число А, содержащее два знака до запятой и два после. Получить новое число, поменяв в числе А целую и дробную части.

Содержимое разработки

Линейные программы

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

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

Пример 1. Пешеход шел по пересеченной местности. Его скорость движения по равнине v1 км/ч, в гору — v2 км/ч и под гору — v3 км/ч. Время движения соответственно t1, t2 и t3 ч. Какой путь прошел пешеход?

1. Ввести v1, v2, v3, t1, t2, t3.

2. S1 := v1 * t1.

3. S2 := v2 * t2.

4. S3 := v3 * t3.

5. S := S1 + S2 + S3.

6. Вывести значение S.

7. Конец.

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


1) Арифметические выражения
Арифметические выражения строятся из имен переменных, констант, знаков операций и круглых скобок так, как это принято в математике. При вычислении их значений операции выполняются в порядке приоритета: *, /, DIV, MOD, а затем + и -. Операции одинакового старшинства выполняются слева направо.
Наряду с переменными и константами в арифметические выражения можно включать функции. При определении значения выражения, прежде всего, вычисляются значения входящих в него функций. В Паскале имеются следующие стандартные функции:

функция

назначение

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

ABS(X)

Абсолютное значение Х

Вещественный

ARCTAN(X)

Арктангенс Х

Вещественный

COS(X)

Косинус Х

Вещественный

EXP(X)

Экспонента

Вещественный

FRAC(X)

Дробная часть Х

Вещественный

INT(X)

Целая часть Х, обнуление дробной части

Вещественный

LN(X)

Натуральный логарифм

Вещественный

PI

Значение PI=3.1415926535897932385

Вещественный

ROUND(X)

Округление до ближайшего целого

Целый

SIN(X)

Синус Х

Вещественный

SQR(X)

Квадрат Х

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

SQRT(X)

Квадратный корень Х

Вещественный

TRUNC(X)

Отбрасывание дробной части

Целый

Аргумент функции обязательно заключается в скобки.
Выражение на Паскале, как впрочем, и на других языках программирования, записывается в одну строчку, а для сохранения порядка действий используются скобки. Все действия должны быть указаны. Например, 2Х + XY надо записать как 2*Х + Х*Y.


Задания для тренировки
1) Найдите значения переменных, если это возможно. Учтите, что число 4.0 является вещественным, т.к. оно имеет дробную часть, хотя и равную нулю.

Операции MOD и DIV можно выполнять только над целыми числами:
a) A:=21 DIV 5; b) A:= 2 MOD 3
B:= 20 MOD 5 B:= 36.0 MOD 6
C:= 14 DIV 6.0 C:= 81 DIV 0
D:= 14 MOD 0 D:= 38 DIV 6
E:= 5 MOD 13 E:= 3 DIV 2

2) Найдите значения переменных, если это возможно:
a) A:=SQR(100) b) A:=sqrt(9)
B:=sqrt(100) B:=SQR(9)
C:=SQR(-10) C:=SQRT(-9)
D:=SQRT(-10) D:=SQR(-9)
E:=SQR(0.9) E:=SQRT(0.0)
F:=SQRT(0) F:=SQR(0.1)

3) Найдите значения переменных, если это возможно:
a) A:=ROUND(6.9) b) A:=ROUND(15.39)
B:=ROUND(6.48) B:=ROUND(15.8)
C:=TRUNC(9.5) C:=TRUNC(-39)
D:=FRAC(9.5) D:=FRAC(39)
E:=INT(9.5) E:=INT(39)
F:=TRUNC(-17) F:=TRUNC(5.6)
G:=FRAC(17) G:=FRAC(-0.3)
H:=INT(-17) H:=INT(1.25)


2.. Обмен значениями..

Рассмотрим пример: Поменять местами значения переменных X и Y, не используя дополнительной переменной.

Первая мысль, приходящая в голову, это написать программу, похожую на эту:
A:= B;
B:= A;

Но эта программа работать не будет (в обеих переменных будет значение B).
Теперь поищем правильное решение. Обозначим начальное значение A за A1, B за B1. Тогда необходимо, чтобы по окончании работы программы A равнялось B1, а B - A1.

0) A=A1; B=B1;
1) Занесем в переменную A результат суммирования A и B (A := A + B):
A = A1 + B1; B = B1;
2) Занесем в переменную B разность A и B (B := A - B):
т.к. A = A1 + B1; то B=(А1+В1)-В = A1;
3) Занесем в переменную A разность A и B (A := A - B):
A = B1; B = A1;

Код программы:

Program prim_4;
Var a,b:integer;
Begin
Write('введите два числа ');
Readln(A,B);
A:=A+B;
B:=A-B;
A:=A-B;
Writeln('A=',A);
Writeln('B=',B);
Readln;
End.

3..Эффективные алгоритмы.
Вы уже знаете, что в Паскале отсутствует возможность возведения в степень, не считая квадрата. Поэтому для получения а^20 нужно а*а*а*а...*а 19 раз. Но если учесть, что результат умножения можно сохранить в промежуточной переменной, ответ можно найти за 5 действий.

Program prim_4;
Var a,b:real;
Begin
Write('введите число');
Readln(A);
В:=A*А; {получаем А во 2}
B:=В*В; {получаем А в 4}
В:=A*B; {получаем А в 5}
B:=В*В; {получаем А в 10}
B:=В*В; {получаем А в 20}
Writeln('A в 20 степени=',В:0:2);
{Вместо указания ширины поля для вывода числа лучше ставить 0, тогда компилятор отведет столько позиций под целую часть, сколько получилось в ответе, а для дробной части я посчитала возможным оставить 2 позиции}
Readln
End.

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


Задание для тренировки.

1) Поменяйте между собой значения трех переменных X, Y и Z по схеме тройного квартирного обмена: Х®Y®Z®X.

2) Присвойте переменной N ее собственное значение, увеличенное в N раз.

3).Дано вещественное число А. Не пользуясь никакими арифметическими операциями, кроме умножения, получить:
а) А^15 за пять операции;
б) А^19 за пять операции;
в) А^21 за шесть операции;
г)А^28 за шесть операции;


4. Целочисленная арифметика. Задачи на целочисленное деление.
В программировании существует целый класс задач, где действия производятся только с целыми числами. При решении подобных задач обычно используются операции над целыми MOD и DIV. Сегодня мы познакомимся с задачами на целочисленное деление.

Задача. Дано расстояние в сантиметрах. Найти число полных метров в нем.

Код программы:

Program prim_4;
Var a,b:integer;
Begin
Write('введите расстояние в сантиметрах');
Readln(a);
b:=a div 100;
Writeln(b,' метров ');
Readln
End.


Задания

1.Установите соответствие между служебными словами и названиями разделов программы:

  1. Var

  2. Program

  3. Uses

  4. Begin … end

  1. Раздел операторов

  2. Раздел имени программы

  3. Раздел описания переменных

  4. Раздел описания библиотечных модулей

2. Расположите в правильном порядке строки программы, вычисляющей периметр и площадь параллелограмма:

1) S:=a*h;


2) end.


3) program pr;


4) p:=2*(a+b);


5) Uses crt;


6) var a,b,h,p,s: integer;


7) readln;


8) Writeln(‘p=’,p,’ s=’,s);


9) a:=6;b:=3;h:=4;


10) clrscr;


11) begin


3. Дан текст программы в таблице с ошибками:

    • исправьте ошибки в программе;

    • что выведется на экран в результате выполнения программы?

Программа с ошибками

Программа без ошибок

На экране будет напечатано:

War: a,b,c – integer, x: real;

Bigin

A=7,

b=3,2,

c:=a+b;

Writln ( summa= , c);

C:=c/2;

x:=a-c;

Writeln(‘x=’ , x, ‘kvadrat=’ , x*x);

And



Program Ошибки2;

Begin Var

X:integer;

X:=6+8;

Write(X);

End;




Задания для тренировки.
1.Дана масса в килограммах. Найти число полных центнеров в ней.
2.Дана масса в килограммах. Найти число полных тонн в ней.
3.Дано расстояние в метрах. Найти число полных километров в нем.
4.Дан прямоугольник с размерами 543х130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него?

5.Напишите программу, которая запрашивает два числа, находит остаток от деления первого на второе и выводит результат.

6. Дана сторона квадрата a. Найдите его периметр P=4*a

7.Даны стороны прямоугольник a и b. Найти его площадь S = a*b и периметр P = 2*(a + b).

8. Дан диаметр окружности d. Найти ее длину  L = ?*d. В качестве значения ? использовать  3.14.

9.*Дано целое число k (1

10. *Дано вещественное число А, содержащее два знака до запятой и два после. Получить новое число, поменяв в числе А целую и дробную части.



-75%
Курсы повышения квалификации

Внедрение современных педагогических технологий в условиях реализации ФГОС (в предметной области «Информатика»)

Продолжительность 72 часа
Документ: Удостоверение о повышении квалификации
4000 руб.
1000 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Линейные программы (70 КB)

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

Чтобы добавить комментарий зарегистрируйтесь или на сайт

Вы смотрели