четвер, 27 листопада 2014 р.

Алгоритми для рядків із символів

АЛГОРИТМИ ДЛЯ РЯДКІВ ІЗ СИМВОЛІВ

Задача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.


Задача 4. Кодування: приклад  простого кодування (рух  за ключем)
{ Алгоритм: Кожний код символу збільшується на деяке число - "ключ"   }
var s:string;
    i,key:integer;
begin
     writeln('Введіть текст'); readln(s);
     writeln('Введіть ключ (число от 1 до 255)'); readln(key);
     for i:=1 to length(s) do s[i]:=char( ord(s[i]) + key  );
     writeln('Закодований текст: ',s);
end.

Задача 5. Обробка тексту: підрахунок кількості слів у тексті
На вході - текст, на виході - кількість слів у тексті             
const Alpha : set of char=['A'..'Z','А'..'П','Р'..'Я','a'..'z','а'..'п','р'..'я'];
var s:string;
    i:integer;
    wc:integer;
begin
     writeln('Введіть текст'); readln(s);
     i:=1; wc:=0;
     Repeat
        while NOT(s[i] in Alpha) and (i<=length(s)) do inc(i);
        if (i<=length(s)) then inc(wc);
        while (s[i] in Alpha) and (i<=length(s)) do inc(i);
     Until (i>length(s));
     writeln('Кількість слів у цьому тексті = ',wc);
end.
  

 Задача 6. Обробка тексту: видалення  слів із тексту
{ На вході - текст, на виході - список слів                                }
const Alpha : set of char=['A'..'Z','А'..'П','Р'..'Я','a'..'z','а'..'п','р'..'я'];
var s,t:string;
    i:integer;
begin         writeln('Введіть текст'); readln(s);
     writeln('Список слів у тексті:');
     i:=1;
     Repeat      while NOT(s[i] in Alpha) and (i <= length(s)) do inc(i);
        t:='';
        while (s[i] in Alpha) and (i <= length(s)) do begin
              t:=t+s[i];
              inc(i);          end;
        if length(t) <> 0 then writeln(t);
     Until (i > length(s));  end.
Задача 7. Обробка тексту: видалення чисел із тексту
{ На вході - текст, на виході - список  чисел}  
const Digits : set of char=['0'..'9'];
var s,d:string;
    i:integer;
begin
     writeln('Введіть текст із  цифрами:'); readln(s);
     writeln('Список чисел у тексті:');
     i:=1;
     Repeat
        while NOT(s[i] in Digits) and (i <= length(s)) do inc(i);
        d:='';
        while (s[i] in Digits) and (i <= length(s)) do begin
              d:=d+s[i];
              inc(i);
        end;
        if length(d) <> 0 then writeln(d);
     Until (i > length(s));
end.
  
Задача 8. Обробка тексту:  залишити для виводу тільки цифри
{ На вході - текст с цифрами але будуть виводиться тільки цифри }
uses crt;
const ENTER=#13;
var c:char;
begin
     writeln('Введіть букви і  цифри');
     c:=readkey;
     while (c<>ENTER) do begin
        if c in ['0'..'9'] then write(c);
        c:=readkey;
     end;
     writeln;
end.

Задача 9. Обробка тексту: перехід  на маленькі  літери (нижній регістр)
{ На вході - текст, на виході - текст із маленьких букв                    }
var s:string;

function SmallAlpha(ps:string):string;
var i:integer;
begin
   for i:=1 to length(ps) do begin
     case ps[i] of
        'A'..'Z','А'..'П': inc(ps[i],32);
        'Р'..'Я'         : inc(ps[i],80);
     end;
   end;
   SmallAlpha:=ps;
end;

begin
     writeln('Введіть довільний текст'); readln(s);
     writeln('Цей ж текст маленькими буквами:');
     writeln(SmallAlpha(s));
end.

Задача 10. Обробка тексту: перехід  на  великі літери  (верхній регістр)
   { На вході - текст, на виході - текст із великих літер  }
var s:string;
function BigAlpha(ps:string):string;
var i:integer;
begin
   for i:=1 to length(ps) do begin
     case ps[i] of
        'a'..'z','а'..'п': dec(ps[i],32);
        'р'..'я'         : dec(ps[i],80);
     end;
   end;
   BigAlpha:=ps;
end;

begin
     writeln('Введіть довільний текст'); readln(s);
     writeln('Цей ж  текст з великими буквами:');
     writeln(BigAlpha(s));
end.

Задача 11. Обробка тексту: видалення  із тексту  коментарів типу {...}
{ На вході - текст з коментарями, на виході - текст без коментарів       }
var s,r:string;
    state,i:integer;
begin
     writeln('Введіть  довільний текст с коментарями'); readln(s);
     r:=''; state:=0; 
     for i:=1 to length(s) do begin
        case s[i] of
           '{': if state=0 then state:=1;  {теперь мы внутри комментария}
           '}': if state=1 then state:=0   {теперь мы вышли из комментария}
                else r:=r+s[i];            {мы не в комментарии}
           else if state=0 then r:=r+s[i]; {мы не в комментарии}
        end;
     end;
     writeln('новый текст:'); writeln(r);

end.


АЛГОРИТМИ ДЛЯ РЯДКІВ ІЗ СИМВОЛІВ
Задача 12. Друк усіх елементів  із проміжку C..D
var a:array[1..10] of integer;
    c,d:integer;
    i:integer;
begin
     writeln('введіть 10 чисел масиву');
     for i:=1 to 10 do readln( a[i] );
     writeln('введи iнтервал C и D');
     readln( c,d );
     for i:=1 to 10 do begin
        if (a[i]>=C) and (a[i]<=D) then writeln(a[i]);
     end;  end.

Задача 13. Циклічний рух масиву вправо
var a:array[1..10] of integer;
    x:integer;
    i:integer;
begin
     writeln('введіть 10 чисел масиву');
     for i:=1 to 10 do readln( a[i] );
     x:=a[10];
     for i:=10 to 2 do begin
       a[i]:=a[i-1];
     end;
     a[1]:=x;
     writeln('після руху:');
     for i:=1 to 10 do writeln( a[i] );  end.

 Задача 14. Друк найуживанішого елемента
var a:array[1..10] of integer;
    i,j,m,p,n:integer;
begin
     writeln('введіть 10 чисел масиву');
     for i:=1 to 10 do readln( a[i] );
     m:=1; p:=1;
     for i:=1 to 10 do begin
       n:=0;
       for j:=1 to 10 do begin
          if a[i]=a[j] then inc(n);         end;
       if n>m then begin
          m:=n; p:=i;         end;        end;
     writeln('самий  уживанніший елемент:',a[p]);  end.


 Задача 15. Чи усі числа масиву різні?
var a:array[1..10] of integer;
    i,j:integer;
begin
     writeln('введіть 10 чисел масиву');
     for i:=1 to 10 do readln( a[i] );
     i:=1;
     while (i<10) and (j<11) do begin
       j:=i+1;
       while (j<11) and (a[i]<>a[j]) do inc(j);
       inc(i);
     end;
     if i<11 then writeln('у масиві  є рівні числа')
             else writeln('усі числа різніразличны');
end.

Задача 16. Сортування масиву "бульбашкою"
const n = 10; { кількість елементів у масиві  }
var a:array[1..n] of integer;
    i,j,x:integer;
begin
     writeln('введіть ',n,' чисел масиву');
     for i:=1 to n do readln( a[i] );

     for i:=1 to n-1 do begin
         for j:=i+1 to n do begin
           if a[i]>a[j] then begin
              x:=a[i]; a[i]:=a[j]; a[j]:=x;
           end;           end;        end;
     writeln('після сортування:');
     for i:=1 to n do writeln( a[i] );
end.
Задача 17. Перехід від  10-го  числення в 2-ове числення
var a : longint;
function DEC_BIN(x:longint):string;
const digits:array [0..1] of char = ('0','1');
var res:string; d:0..1;
begin
   res:='';
   while (x<>0) do begin
      d:=x mod 2; res:=digits[d]+res;
      x:=x div 2;
   end;
   DEC_BIN:=res;
end;
begin
  readln( a );
  writeln( DEC_BIN(a) );
end.

Задача 18. Перехід від  2-го  числення в 10-ове числення
var a : string;
function BIN_DEC(x:string):longint;
const digits:array [0..1] of char = ('0','1');
var res,ves:longint; i,j:byte;
begin
   res:=0; ves:=1;
   for i:=length(x) downto 1 do begin
      j:=0;
      while (digits[j]<>x[i]) do inc(j);
      res:=res+ves*j;
      ves:=ves*2;
   end;
   BIN_DEC:=res;
end;
begin
  readln( a );
  writeln( BIN_DEC(a) );
end.




Задача N10_N16. Переведіть  натуральне число із десяткової системи числення в 16-ову систему числення, використовуючи мову Pascal.
var a : longint;

function DEC_HEX(x:longint):string;
const digits:array [0..15] of char = ('0','1','2','3','4','5','6','7',
                                      '8','9','A','B','C','D','E','F');
var res:string; d:0..15;
begin
   res:='';
   while (x<>0) do begin
      d:=x mod 16;
      x:=x div 16;
      res:=digits[d]+res;
   end;
   DEC_HEX:=res;
end;
begin     readln( a );    writeln( DEC_HEX(a) );   end.

Задача N16_N10. Переведіть  натуральне число із 16-ової системи числення в 10-ову систему числення.
var a : string;
function HEX_DEC(x:string):longint;
const digits:array [0..15] of char =
      ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var res,ves:longint; i,j:byte;
begin
   res:=0; ves:=1;
   for i:=length(x) downto 1 do begin
      j:=0; a[i]:=UpCase(a[i]);
      while (digits[j]<>x[i]) do inc(j);
      res:=res+ves*j;
      ves:=ves*16;
   end;
   HEX_DEC:=res;
end;
begin { основная программа }
  readln( a );
  writeln( HEX_DEC(a) ); end.



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

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