5 апр. 2008 г.

Разное(Pascal/Паскаль)

Задача:

  Выведем на экран все символы и их коды.

Код:


program ASCII;
uses crt;
var i,k:integer;
Begin
clrscr;
for i:= -9 to 13 do begin
                     for k:= 1 to 11 do
                     Write((i+k*23) mod 256 ,'  ',Chr(i+k*23),' ');
                     Writeln; {перевод строки}
                   end;
Readkey;      {ожидание нажатия любой клавиши}
End
  


Задача:

  Демонстрация цветовых атрибутов текста.

Код:


program Colors;
uses crt;
var i:integer;
Begin
clrscr;
for i:= 0 to 1279 do begin            {Все цвета}
                    TextAttr:=i;
                    Write('X');
                    end;
TextAttr:=10;
Readln;
clrscr;
for i:= 0 to 128 do begin             {42!}
                    TextAttr:=i;
                    Write(i);
                    end;
Readln;
End.



Задача:

Создайте массив А[1..15], заполненного случайными числами от-15 до 30. Дано число X. Вывести слева от числа X все элементы числового массива меньшие этого числа, а справа - большие его.

Код:


program mb;
var A: array[1..15] of integer;
    X, i: integer;
Begin
X:= 10;
Randomize;
for i:= 1 to 15 do begin
A[i]:= Random(46)-15;
if A[i] < X then write(A[i],' ');   {выводим элементы, меньшие Х}
                  end;
Write(X, ' ');                      {сам Х}
for i:= 1 to 15 do
if A[i] > X then write(A[i],' ');   {и элементы больше него}
Readln;
End.


Задача:

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

Код:


program sq;
var X: array[1..5] of longint;
    i: integer;
Begin
Writeln('Введите 5 целых чисел:');
for i:= 1 to 5 do
Read(X[i]);
Writeln;
for i:= 1 to 5 do begin
Write('X[',i,']= ',X[i]:5,' ');
Write('sqr(',X[i]:5,')= ',sqr(X[i]):10,' ');
Writeln('sqrt(',X[i]:5,')= ',sqrt(X[i]):5:5,' ');
                  end;
Readln;
Readln;
End.


Задача:

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

Код:


program prosto_chisla;
uses crt;
var n,i,symma,k,pdel:integer;
    p, Code : Integer;
    Str: string;
    yn:string;
Begin
clrscr;
repeat
 symma:=0;
 pdel:=0;
  repeat
   Write('Введите n: ');
   Readln(str);
   Val(Str, p, Code);
   if Code<>0 then Writeln('Неправильный ввод! Ошибка в позиции: ',Code) Else Writeln('Ok!');
  until Code = 0;
 n:=p;
 for i:=2 to n do begin
                    for k:=2 to i do begin           {проверяем простое ли это число}
                    if i mod k = 0 then pdel:=pdel+1;
                                     end;
                    if pdel=1 then symma:=symma+i;   {т.е. оно делится только на себя(и 1)}
                    if pdel=1 then Write(i,' ');
                                     pdel:=0;
                  end;
Writeln;
Writeln(symma);
Write('Ещё раз(y/n)? ');
Readln(yn);
until yn='n';
End.


Задача:

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

Код:


program prosto_deliteli;
uses crt;
var n,i,symma,k,pdel:integer;
    P, Code : Integer;
    Str: string;
    yn:string;
Begin
clrscr;
repeat
 symma:=0;
 pdel:=0;
  repeat
   Write('Введите n: ');
   Readln(str);
   Val(Str, p, Code);
   if Code<>0 then Writeln('Неправильный ввод! Ошибка в позиции: ',Code) Else Writeln('Ok!');
  until Code = 0;
 n:=P;
 for i:=2 to n do begin
                  if n mod i = 0 then begin    {если делитель}
                    for k:=2 to i do begin      {проверяем простой ли он}
                    if i mod k = 0 then pdel:=pdel+1;
                                     end;
                    if pdel=1 then symma:=symma+i;   {т.е. у него 1 делитель(он сам)}
                    if pdel=1 then Write(i,' ');
                                     pdel:=0;
                                     end;
                 end;
Writeln;
Writeln(symma);
Write('Ещё раз(y/n)? ');
Readln(yn);
until yn='n';
End.


Задача:

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

Описание:

  Счастливым билетом считается тот, у которого сумма первых трёх цифр равна сумме трёх последних. Будем считать, что существуют билеты с номерами от 000001 до 999999.

Код:



program happiness;
uses crt;
var i,j,k,x,y,z: integer;
    happytickets: longint;
    begin
    clrscr;
         happytickets:= -1; {считаем, что билета 000000 не существует}

         for i:= 0 to 9 do
          for j:= 0 to 9 do
           for k:= 0 to 9 do
            for x:= 0 to 9 do
             for y:= 0 to 9 do
              for z:= 0 to 9 do

               if i+j+k = x+y+z then inc(happytickets);

    Write('Счастливых билетов: ',happytickets);
    Writeln(' (это ',10000/happytickets:3:6,'% от общего числа всех билетов)');
    Writeln;
    Readln;
end
   

 Троичная система

Задача:

  Дано натуральное n, напечатать в троичной системе счисления все числа от нуля до n.

Код:


program Three_sys;
uses crt;
const
      lim=20; {размер массива}
var n, i, p:longint; {n-число}
      j, r:integer;
     mas:array[1..lim] of integer; {массив, в котором храниться число в троичной записи}
Begin
  clrscr;
  Write('Введите n: ');
  Readln(n);
    for i:= 0 to n do {перебираем все числа до n}
      begin
       p:=i; {сохраняем i в p}
       for j:= 1 to lim do {цикл по всем элементам массива}
         begin
         mas[j]:= p mod 3; {остаток от деления в массив}
         p:= p div 3; {целое от деления будем дальше делить}
         end;
       for j:= 1 to lim do
         if (mas[j]<>0) then r:=j; {считаем число ненулевых ячеек в массиве}
       if i= 0 then r:=1;
       Write(i,' = '); {вывод числа}
       for j:= 1 to r do {и его троичной записи}
         Write(mas[r-j+1]); {идем от конца массива}
       for j:= 1 to lim do
         mas[lim-j+1]:=0; {обнуляем массив}
       Writeln;
      end;
  Readln;
end.


Системы счисления

Задача1:

  подсчитать количество цифр в записи числа n в системе счисления с основанием k.

Код:


program n_in_k_sys;
uses crt;
var n, p:longint; {n-число}
    j, r, k:integer;
Begin
  clrscr;
  Write('Введите n: ');
  Readln(n);
  Write('Введите k: ');
  Readln(k);
    p:=n; {сохраняем n в p}
       while p > 0 do
         begin
         p:= p div k; {целое от деления будем дальше делить}
         inc(r); {инкремент или увеличение на 1}
         end;
       if n = 0 then r:=1;
       Write('n в системе счисления с основанием ',k,' займет ',r,' разрядов'); {вывод}
  Readln;
end.


Задача2:

  вывести представление этого числа на экран в системе k.

Описание:

  Сделаем вывод этого числа на экран. Для его представления будем брать символы из таблицы кодов ASCII(смотри функцию Chr).

Код:


program n_in_k_sys_2;
uses crt;
const
  lim=20; {размер массива}
var n, p:longint; {n-число}
    j, r, k:integer;
    mas:array[1..lim] of integer; {массив, в котором храниться число в k-ичной записи}
Begin
  clrscr;
  Write('Введите n: ');
  Readln(n);
  Write('Введите k: ');
  Readln(k);
    p:=n; {сохраняем n в p}
       for j:= 1 to lim do {цикл по всем элементам массива}
         begin
         mas[j]:= p mod k; {остаток от деления в массив}
         p:= p div k; {целое от деления будем дальше делить}
         end;
       for j:= 1 to lim do
         if (mas[j]<>0) then r:=j; {считаем число ненулевых ячеек в массиве}
       if n= 0 then r:=1;
       Writeln('n в системе счисления с основанием ',k,' займет ',r,' разрядов'); {вывод числа}
       Write(n,' in 10 = ');
       for j:= r downto 1 do
        Write(Chr(mas[j]+48)); {выводим число, кодируя его символами таблицы ASCII}
       Write(' in ',k);
  Readln;
end.


Цифры в записи числа

Задача:

Дано натуральное число X. Определить являются ли цифры в записи числа различными.

Код:


program dif_dig;
var x: longint;
    D: array[0..9] of boolean;
Begin
Write('Input x:');
Readln(x);
while (x <> 0) do begin
                  if D[x mod 10] = true then begin
                                          Writeln('Цифры повторяются!');
                                          Readln;
                                          Exit;
                                          end
                  else D[x mod 10]:= true;
                  x:= x div 10;
                  end;
Write('Все цифры различны!');
Readln;
End.


Бархатный сезон


Задача:

Данные о температуре воды на Черноморском побережье за декаду сентября хранятся в массиве Определить, сколько за это время было дней, пригодных для купания (Т > 20 ).

Код:


program Temperature;
var i,n: integer;
    T: array[1..10] of integer;
Begin
Randomize;
for i:= 1 to 10 do begin
  T[i]:= 15 + Random(15);
  Write(T[i], ' ');
  if T[i] > 20 then inc(n);
                   end;
Writeln;
Write('Дней для купания: ',n);
Readln;
End.

Вычисления

Задача:

Даны K,L,P. Вычислить Z=корень квадратный из (L-P2 )/L*P; и S=sinZ+K2/cosK

Код:


program klp;
var k,l,p: integer;
    s,z: real;
Begin
repeat
Write('Введите k,p,l: ');
Readln(k,p,l);
until (p*l <> 0) and ((l- sqr(p))/(l*p) > 0); {чтобы не было деления на 0 и}
                                         {подкоренное выражение не меньше 0}
z:= sqrt( (l- sqr(p))/(l*p) );
s:= sin(z) + sqr(k)/cos(k);

Writeln('z= ',z:6:6);
Writeln('s= ',s:6:6);

Readln;
End.

 

Разложение ln(x) в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение ln(x) с заданной точностью e.

Описание:

  

Код:


program lnx_teilor;
var x,stx,lnt,e: real;
    i,fakt,z: integer;
Begin
Write('Введите 1 < x < 2: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:= x-1;  {x в степени}
 fakt:= 1;  {значение знаменателя}
 lnt:= 0;  {первый элемент в разложении}
 i:= 1;  {счётчик}
 z:= 1;  {знак элемента}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                      lnt:=lnt+z*stx/fakt;
                      inc(i);
                      stx:=stx*(x-1);
                      fakt:=i;
                      z:=z*(-1);  {смена знака}
                      end;
Writeln('Количество элементов в разложении = ',i);
Writeln('Значение ln(',x:6:6,')= ',lnt:6:6);
Writeln('Значение компьютера: ',ln(x):6:6);
Readln;
End.

Разложение ex в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение ex с заданной точностью e.

Описание:

  

Код:



program ex_teilor;
var x,stx,ex,e: real;
    i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:=x;  {x в степени}
 fakt:=1;  {значение факториала в знаменателе}
 ex:=1;  {первый элемент в разложении}
 i:=1;  {счётчик}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                     ex:=ex+stx/fakt;
                     inc(i);
                     stx:=stx*x;
                     fakt:=fakt*i;
                     end;
Writeln('Количество элементов в разложении = ',i+1);
Writeln('Значение e^',x:6:6,'= ',ex:6:6);
Writeln('Значение компьютера: ',exp(x):6:6);
Readln;
End.





Разложение синуса в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение sin(x) с заданной точностью e.

Описание:

  

Код:


program sin_teilor;
var x,stx,sint,e: real;
    i,fakt,z: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:= x;  {x в степени}
 fakt:= 1;  {значение факториала в знаменателе}
 sint:= 0;  {первый элемент в разложении}
 i:= 1;  {счётчик}
 z:= 1;  {знак элемента}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                      sint:=sint+z*stx/fakt;
                      inc(i,2);
                      stx:=stx*x*x;
                      fakt:=fakt*(i-1)*i;
                      z:=z*(-1);  {смена знака}
                      end;
Writeln('Количество элементов в разложении = ',i div 2);
Writeln('Значение sin(',x:6:6,')= ',sint:6:6);
Writeln('Значение компьютера: ',sin(x):6:6);
Readln;
End.



Разложение косинуса в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение cos(x) с заданной точностью e.

Описание:

  

Код:


program cos_teilor;
var x,stx,cost,e: real;
    i,fakt,z: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:= x*x;  {x в степени}
 fakt:= 2;  {значение факториала в знаменателе}
 cost:= 1;  {первый элемент в разложении}
 i:= 2;  {счётчик}
 z:= -1;  {знак элемента}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                      cost:=cost+z*stx/fakt;
                      inc(i,2);
                      stx:=stx*x*x;
                      fakt:=fakt*(i-1)*i;
                      z:=z*(-1);  {смена знака}
                      end;
Writeln('Количество элементов в разложении = ',i div 2 + 1);
Writeln('Значение cos(',x:6:6,')= ',cost:6:6);
Writeln('Значение компьютера: ',cos(x):6:6);
Readln;
End.



Разложение гиперболического синуса в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение sh(x) с заданной точностью e.

Описание:

  

Код:


program sh_teilor;
var x,stx,sh,e: real;
    i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:=x;  {x в степени}
 fakt:=1;  {значение факториала в знаменателе}
 sh:=0;  {первый элемент в разложении}
 i:=1;  {счётчик}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                     sh:=sh+stx/fakt;
                     inc(i,2);  {увеличение i на 2}
                     stx:=stx*x*x;
                     fakt:=fakt*(i-1)*i;
                     end;
Writeln('Количество элементов в разложении = ',i div 2);
Writeln('Значение sh(',x:6:6,')= ',sh:6:6);
Readln;
End.



Разложение гиперболического косинуса в ряд Тейлора

Задача:

  Используя разложение в ряд Тейлора найти значение ch(x) с заданной точностью e.

Описание:

  

Код:


program ch_teilor;
var x,stx,ch,e: real;
    i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
 stx:= x*x;  {x в степени}
 fakt:= 2;  {значение факториала в знаменателе}
 ch:= 1;  {первый элемент в разложении}
 i:= 2;  {счётчик}
while stx/fakt>=e do begin  {до тех пор, пока элемент в разложении не меньше точности}
                     ch:=ch+stx/fakt;
                     inc(i,2);
                     stx:=stx*x*x;
                     fakt:=fakt*(i-1)*i;
                     end;
Writeln('Количество элементов в разложении = ',i div 2 + 1);
Writeln('Значение ch(',x:6:6,')= ',ch:6:6);
Readln;
End
 

Простая задача на Чтение / Запись

Задача:

  Память на жестком диске компьютера разбита на параграфы, каждый размером 16 Кб. Файл может занимать только целое кол-во параграфов, даже если параграф занят не весь, то он все равно отдается файлу полностью. Файл INPUT.TXT содержит целые числа, указанные через пробел, отвечающие размерам файлов в байтах. Неоходимо подсчитать общий объём, занимаемый ими на жестком диске. Ответ записать в файл OUTPUT.TXT .

Код:


program RW;
var f: text;
    i,s: longint;
Begin
  s:= 0;

Assign(f,'INPUT.TXT');
 Reset(f);
  while not Eof(f) do begin
    Read(f,i);
    s:= s + (i div 16384 + 1);
                      end;
 s:= s * 16384;
Close(f);

Assign(f,'OUTPUT.TXT');
 Rewrite(f);
 Write(f,s);
Close(f);

End.


Игра тетрис, написанная на Паскале.
Скачать