неділю, 21 січня 2018 р.

Aлгоритми мовою Pascal

Практична робота 7
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.




БАНК ЗАВДАНЬ «Лінійні алгоритми»

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. 


https://www.ua5.org/pascal/

Мови програмування

http://borlpasc.narod.ru/
Сайт, присвячений мові програмування Turbo Pascal
http://chemisk.narod.ru/
Програмування на Паскалі
http://www.codenet.ru/
Все для програміста
http://lktalks.blogspot.com/2007/06/blog-post_24.html
Перша у світі мова програмування
http://pascal-md.narod.ru/
Паскаль школярам
http://pascalstudy.narod.ru/
Все для вивчення Турбо Паскаль
http://progopedia.ru/
Енциклопедія мов програмування
http://prohod.org/
Мова програмування ЛОГО
http://schools.keldysh.ru/sch444/MUSEUM/LANR/evol.htm
Еволюція мов програмування
http://www.toehelp.ru/theory/informat/lecture04.html
Лекції з мови програмування Турбо Паскаль

Немає коментарів:

Дописати коментар