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