Практична
робота 7
Aлгоритми мовою Pascal
Aлгоритми мовою Pascal
Завдання 1. На конференцію приїхали рівно по k представників від m(не менше ніж 2) фірм-конкурентів по виробництву гри
"Саmрf", при
цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника
конференції рівно n конкурентів серед усіх інших учасників. Скласти алгоритм, який знаходить найбільшу
кількість учасників та найменшу
кількість фірм-конкурентів в конференції?
Розв’язання. Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного
представника дорівнює k(m-1)= n, звідси
маємо рівність km = n + k, права частина якого є лінійний вираз відносно двох
змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на
межах числового проміжка від 1 до n. Якщо k = n, то маємо найбільше
значення р(n)= n + n =2n, тому nm = 2n, звідси m = 2. Відповідь: 2n осіб, 2 фірми.
Алгоритм мовою Pascal
program МіnConkurent; var
k,m,n:integer; begin
writeln('введіть число
конкурентів в особи 2<n<109 n=');
readln(n);
write('найбільше:', 2*n,
' осіб'); {вивід найбільшого
числа учасників}
write('найменше: 2 фірми'); {вивід найменшого
числа учасників}
end. {оголошення кінця алгоритму}
Завдання 2.
На
конференцію приїхали рівно по k представників від m(не менше ніж
2) фірм-конкурентів по виробництву гри "Саmрf", при
цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника
конференції рівно n конкурентів серед усіх інших учасників. Скласти алгоритм, який знаходить найбільшу
кількість фірм-конкурентів і найменшу кількість представників в конференції?
Розв’язання. Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного
представника дорівнює k(m-1)= n, звідси
маємо рівність km = n + k, права частина якого є лінійний вираз відносно двох
змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на
межах числового проміжка від 1 до n. Якщо у
формулі р(k)= n + k, підставимо k = 1, то отримаємо найменше значення р(1)= n + 1 , тому
найбільше значення m = n+1, звідси n = m-1. Відповідь: n+1 фірм, 1 особа.
Алгоритм мовою Pascal
program МахConkurent; var n:integer; begin
writeln('введіть число
конкурентів в особи 2<n<109 n=');
readln(n);
write('найбільше:' n+1, 'фірм'); {вивід найбільшого
числа фірм}
write('найменше: 1 представник від фірми'); {вивід найменшого
числа представників }
end. {оголошення
кінця алгоритму}
Завдання 3.
Відомо, що книжкова полиця вміщає k однакових
товстих книг, але k+1-а книга вже не влазить. Так
само на неї можна поставити m однакових
тонких книг, а m+1 -а вже не влізе. Скласти
алгоритм, який знаходить можливість, щоб на полиці помістилися одночасно: n товстих та p тонких
книг.
Розв’язання. Якщо числовий вираз n/k + p/m <=1, то можна, якщо числовий n/k + p/m > 1, то не можна
помістити одночасно книги на полицю.
Алгоритм мовою Pascal (використовує повне розгалуження, «якщо-то, інакше»)
program BIBLIO; var k,m,n,p,h:real; begin
writeln('введіть число
товстих книг 2<k<109 k='); readln(k);
writeln('введіть число
тонких книг 2<m<109 m='); readln(m);
writeln('введіть даних
товстих книг 2<n<109 n='); readln(n);
writeln('введіть даних
тонких книг 2<p<109 p='); readln(p);
h:=(n/k)+(p/m);
if (h<1)
or (h=1) then write(' кнгиги можна помістити') {розгалуження для виводу результату}
else write('не можна
помістити книги'); {інакше
то вивід результату не можна} writeln('h=', h); end.
Завдання 4. Самостійно скласти і реалізувати алгоритм впорядкування
виразів: (n/k)+(p/m)-(m/p)-(k/m); та (р/k)+(n/m)-(k/n)-(n/p) в порядку
зростання для дробових чисел k,m,n,p.
Завдання 5. Самостійно скласти і реалізувати алгоритм впорядкування
виразів: (1/k)+(1/m)-1/p)-(1/n); та (1/k)+(1/p)-(1/m)-(1/n) в порядку зростання для дробових чисел k,m,n,p.
http://pinskolimp.blogspot.ru/p/5.html
БАНК ЗАВДАНЬ
«Лінійні алгоритми»
1. Створити та реалізувати мовою програмування лінійний
алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c (цe три дійсні числа – real, які вводяться з клавіатури) половину периметрa(р=а+b+c), площу(S=(p(p-a)(p-b)(p-c))0,5), радіус описаного
кола (R=abc/4S), радіус вписаного кола(r=S/p). Вивести на екран шукані
величини.
2. Створити та реалізувати мовою
програмування лінійний алгоритм, що знаходить за трьома відомими сторонами
трикутника a, b, c (цe три дійсні числа – real, які вводяться з клавіатури) усі висоти(Ha = 2(p(p-a)(p-b)(p-c))0,5)/a, Hb = 2(p(p-a)(p-b)(p-c))0,5)/b, Hc = 2(p(p-a)(p-b)(p-c))0,5)/c) трикутника.
Вивести на екран шукані величини.
3. Створити та реалізувати мовою
програмування лінійний алгоритм, що знаходить за трьома відомими сторонами
трикутника a, b, c (цe три дійсні числа – real, які вводяться з клавіатури) усі медіани
(ma = 0.5(2b2 +2c2-a2)0,5,
mb = 0.5(2a2 +2a2-b2)0,5),
mc = 0.5(2b2 +2a2-c2)0,5
трикутника. Вивести на екран
шукані величини.
4. Створити та реалізувати мовою програмування лінійний алгоритм,
що за відомими фізичними величинами a1, m1, m2(дійсні числа)
і
законом збереження імпульсу a2=a1m1/m2 знаходить
прискорення другого фізичного об’єкта(тіла). Вивести на екран шукані величини.
5.
Створити та
реалізувати мовою програмування лінійний алгоритм, що знаходить за відомим ребром
куба а(дійсне число) знаходить площу
поверхні куба( S = 6a2
), об'єм куба (V = a3 ), діагональ куба (D=a(3)0.5), діагональ грані куба (L=a(2)0.5). Вивести на
екран шукані величини.
http://pinskolimp.blogspot.ru/p/5.html
СТАНДАРТНІ АЛГОРИТМИ НА
МОВІ PASCAL
Задача1.
Скласти програму на мові Pascal
підрахунку кількості різних букв
у слові.
var s:string;
r:real;
i,j,n:integer;
begin r:=0;
readln(s);
for i:=1 to
length(s) do begin
n:=0;
for j:=1 to
length(s) do begin
if s[i]=s[j]
then inc(n);
end;
r:=r+1/n; end;
writeln('количество различных букв = ', r:1:0);
end.
Задача 2. Перестановка останньої букви у слові на перше місце
(циклічний рух вправо).
var s:string;
i,j,n:integer;
begin
readln(s);
s:=s[length(s)] + copy(s,1,length(s)-1);
writeln(s);
end.
Результат:
введення: wertyu виведення:
uwerty
Задача 3.
Перевірка рядка на
"паліндромність".
Наприклад ,
"шалаш", "красарк" -
це рядки паліндроми.
var s1,s2:string;
i:integer;
begin
readln(s1); s2:='';
for i:=length(s1) downto 1 do begin
s2:=s2+s1[i]; end;
if s1=s2 then writeln(s1, ' - паліндромне слово')
else writeln(s1, ' - непалідромне слово);
end.
СТАНДАРТНІ АЛГОРИТМИ НА
МОВІ PASCAL
Задача 4. Знайти
і вивести всі дільники натурального числа A
var a,n,c,d:word;
begin {
основная программа }
readln( a );
n:=1;
while ( n <= sqrt(a) ) do begin
c:=a mod n;
d:=a div n;
if c = 0 then begin
writeln( n );
if n <> d then writeln( d );
end;
inc( n );
end;
end.
Задача 5. Знайти і вивести усі досконалі числа до 10000
const LIMIT = 10000;
var n,i,j,s,lim,c,d : word;
begin
for i:=1 to LIMIT do begin
s:=1;
lim:=round(sqrt(i));
for j:=2 to lim do
begin
c:=i mod j; d:=i div j;
if c = 0 then begin
inc(s,j);
if (j<>d)
then inc(s,d); {двічі не додавати корінь числа}
end; end;
if s=i then writeln(i); end;
end.
Задача 6. Знайти
і вивести всі прості числа до 500
const LIMIT = 500;
var i,j,lim : word;
begin
writeln;
for i:=1 to LIMIT do begin
j:=2; lim:=round(sqrt(i));
while (i mod j
<> 0) and (j <= lim) do inc( j );
if (j > lim) then
write( i,' ' ); end;
end.
СТАНДАРТНІ АЛГОРИТМИ НА
МОВІ PASCAL
Задача 7. Знайти
і вивести суму цифр числа до 10000
var a,x:integer;
i,s:integer;
begin
writeln('Введіть ціле число');
readln( a ); x:=a;
s:=0;
while ( x < > 0 )
do begin
s := s + (x mod 10);
x := x div 10;
end;
writeln( 'Сумма цифр
числа ',a,' = ', s );
end.
Задача 8. Знайти
і вивести суму чисел лінійного масиву
var a:array[1..10] of
integer;
s:longint;
i:integer;
begin
writeln('введіть 10 чисел масиву');
s:=0;
for i:=1 to 10 do begin
readln( a[i] );
s:=s+a[i];
end;
writeln( 'Сума елементів масиву = ', s );
end.
Задача
9. Знайти і вивести суму чисел
двомірного масиву 5х5(таблиці)
var a:array[1..5,1..5] of integer;
s:longint;
i,j:integer;
begin
writeln('введіть 25 елементів масиву');
s:=0;
for i:=1 to 5 do begin
for j:=1 to 5 do begin
readln( a[i,j] );
s:=s+a[i,j];
end;
end;
writeln( 'Сума елементів масиву = ', s );
end.
СТАНДАРТНІ АЛГОРИТМИ НА
МОВІ PASCAL
Задача
10. Знайти найбільше число у лінійному
масиві
var
a:array[1..10] of integer;
max:integer;
i:integer;
begin
writeln('введіть 10 елементів масиву');
max:=-(MAXINT+1);
for i:=1 to 10 do begin
readln( a[i] );
if max < a[i] then max:=a[i];
end;
writeln( 'Максимальний елемент масиву = ', max );
end.
Задача 11.
Знайти найменше число у лінійному
масиві
var
a:array[1..10] of integer;
min:integer;
i:integer;
begin
writeln('введіть 10 елементів масиву');
min:=MAXINT;
for i:=1 to 10 do begin
readln( a[i] );
if min > a[i] then min:=a[i];
end;
writeln( 'Мінімальний елемент масиву =
', min );
end.
Задача
12. Знайти середнє арифметичне число для
усіх чисел лінійного масиву
var
a:array[1..10] of integer;
s:longint;
i,n:integer;
begin
s:=0; n:=0;
writeln('введите 10 элементов массива');
for i:=1 to 10 do begin
readln( a[i] );
s:=s+a[i]; inc(n);
end;
writeln( 'Середнє
арифметичне число =
', s/n );
end.
Немає коментарів:
Дописати коментар