АЛГОРИТМИ ДЛЯ РЯДКІВ ІЗ СИМВОЛІВ
Задача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.
Немає коментарів:
Дописати коментар