25.09.2008, 08:14
общий
это ответ
Здравствуйте, Polmer12!
Решение задач №№ 4,6,7,8,9 с пояснениями в приложении.
По задаче №7. Поскольку мы не знаем формат текста, который будет введен, предусмотрим форматирование его к удобному для поиска виду, а именно представим текст как чередование слов и одиночных пробелов(начинается строка словом, заканчивается пробелом).
Приложение:
4.Найти самую большую цифру целого числа.
uses crt;
var n:longint;
i,max:byte;
begin
clrscr;
write('n=');readln(n);{вводим число}
max:=0;
while n>0 do
begin
i:=n mod 10; {отделяем последнюю цифру}
if i>max then max:=i; {сравниваем с максимальной}
n:=n div 10; {берем число без последней цифры и все повторяем, пока число не кончится}
end;
write('Max cifra=',max);
readln
end.
6.Вычислить сумму и количество положительных элементов массива расположенных в четных строках.
uses crt;
const n=6;
m=7;
var a:array[1..n,1..m]of integer;
i,j,k,sum:integer;
begin
clrscr;
randomize;
writeln('Matrica:'); {заполняем и выводим матрицу}
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(10)-4;
write(a[i,j]:4);
end;
writeln;
end;
k:=0;sum:=0;
for i:=1 to n do
for j:=1 to m do
{если строка нечетная + число положительное, то}
if (i mod 2=0)and(a[i,j]>0) then
begin
inc(k); {считаем его}
inc(sum,a[i,j]); {увеличиваем сумму на это число}
end;
write('Sum=',sum,' k=',k);
readln
end.
7.Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово.
uses crt;
const rzd=[',',';',':','!','?','.'];{множество разделителей}
var s,ss:string; {данная и вспомогательная строки}
k,i,j:integer; {счетчики}
s1: array[1..250] of string; {массив слов}
begin
clrscr;
write('s = ');
readln(s);
s :=s + ' '; {добавим в конец пробел, как признак конца слова}
for i:=length(s) downto 1 do
begin
if s[i] in rzd then s[i]:=' ';{заменим разделители на пробелы}
while pos(' ',s)>0 do {если сподряд два пробела}
delete(s,pos(' ',s),1); {один удаляем}
end;
k := 0;ss:='';
while pos(' ',s)>0 do {пока в строке есть пробелы}
begin
ss:=copy(s,1,pos(' ',s)-1); {копируем очередное слово}
if length(ss)=3 then {если оно из трех букв}
begin
inc(k); {то увеличиваем счетчик}
s1[k]:=ss; {и включаем это слово в массив}
end;
delete(s,1,pos(' ',s)); {удаляем очередное слово}
end;
for i:=1 to k do
begin
d:=1;
for j:=1 to k do
if (s1[i]=s1[j])and(i<>j) then {если есть такое же слово на лругой позиции}
begin
inc(d); {увеличиваем счетчик}
s1[j]:=''; {присваиваем элементу массива пувтую строку}
end;
if s1[i]<>'' then {если не пустая строка}
writeln('Slovo ',s1[i],' vstr ',d, ' rz'); {то выводим результат поиска}
end;
if k=0 then writeln ('Takih slov net!'); {если массив пустой, выводим сообщение}
readln
end.
8.Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости.
uses crt;
var x1,y1,x2,y2,x3,y3,x4,y4,P:real;
i:byte;
function Dlina(a1,b1,a2,b2:real):real;{функция для определения длины отрезка}
begin
Dlina:=sqrt(sqr(a1-a2)+sqr(b1-b2));
end;
begin
clrscr;
writeln('Введите координаты вершин по часовой стрелке:');
repeat
write('x1=');readln(x1);
write('y1=');readln(y1);
write('x2=');readln(x2);
write('y2=');readln(y2);
write('x3=');readln(x3);
write('y3=');readln(y3);
write('x4=');readln(x4);
write('y4=');readln(y4);
until (((x1<x2)and(x4<x3))or((x1>x2)and(x4>x3))or((x1=x2)and(x4=x3)))
{проверяем правильность ввода по часовой стрелке}
and (Dlina(x1,y1,x3,y3)=Dlina(x2,y2,x4,y4));
{если длины диагоналей равны, то прямоугольник}
P:=2*(Dlina(x1,y1,x2,y2)+Dlina(x2,y2,x3,y3));{считаем периметр}
Writeln('Периметр прямоугольника = ',P:0:2);
readln
end.
9.Построить массив записей о рабочих завода. Каждая запись содержит поля – фамилия рабочего, наименование цеха, размер заработной платы за месяц. Рассчитать для каждого рабочего размер отпускных из расчета зар.плата*0.75.
uses crt;
type Trab=record {тип запись с полями по условию}
fame:string[20];
ceh:string[20];
zpl:word;
otp:real;
end;
var sp:array [1..100]of Trab; {массив записей}
n,i:integer;
begin
clrscr;
write('Количество рабочих n=');
readln(n);
for i:=1 to n do {Создаем список}
begin
writeln('Рабочий ',i);
write('Фамилия: ');readln(sp[i].fame);
write('Цех: ');readln(sp[i].ceh);
write('Зарплата : ');readln(sp[i].zpl);
sp[i].otp:=sp[i].zpl*0.75;
end;
clrscr;
writeln('Размер отпускных: '); {выводим результат на экран}
writeln;
write('Фамилия');
gotoXY(18,3); {устанавливаем курсор в позицию 18(слева) строки № 3}
write('Цех');
gotoXY(30,3);
writeln('Отпускные');
writeln;
for i:=1 to n do
begin
write(sp[i].fame);
gotoXY(15,4+i); { устанавливаем курсор в позицию 15(слева)в строки начиная с пятой}
write(sp[i].ceh);
gotoXY(32,4+i);
write(sp[i].otp:0:2);
writeln;
end;
readln
end.