Консультация № 158687
25.01.2009, 11:56
0.00 руб.
0 3 3
народ!!! люди добрые!!! помогите!!! нужно решить 4 задачи я над ними уже 3 дня сижу... ничего не могу...

а задачи такие: 1) дана матрица порядка n и число к. разделить элементы к-ой строки на диагональный элемент этой строки. 2) заполнить матрицу линейной последовательности от левого нижнего угла по диагонали : влево вверх.пример заполнения:
10 13 15 16
6 9 12 14
3 5 8 11
1 2 4 7
3) дан текст напечатать в алфавитном порядке все согласные буквы которые не входят ни в одно слово.
4) создать файл содержащий текст на английском языке и некоторые два слова. определить, сколько раз они встречаются в тексте и сколько из них непосредственно друг за другом

Обсуждение

давно
Профессор
401888
1232
25.01.2009, 15:28
общий
это ответ
Здравствуйте, Edise!
Задача №1 с небольшими пояснениями в приложении.

Приложение:
uses crt;
const n=6; {размер матрицы}
var a:array[1..n,1..n]of real;{тип матрицы}
i,j,k:byte;
begin
clrscr;
randomize;
writeln('Ishodnaya matrica:');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=10*random;
write(a[i,j]:5:1);
end;
writeln;
end;
repeat {вводим номер строки с проверкой интервала}
write('k=');
readln(k);
until (k>0)and(k<=n);
for j:=1 to n do
a[k,j]:=a[k,j]/a[k,k];{делим элементы строки на элемент главной диагонали}
writeln('Rezultat:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5:1);
writeln;
end;
readln
end.
Неизвестный
25.01.2009, 15:57
общий
это ответ
Здравствуйте, Edise!

Решение задач 1-3 в приложении.

Приложение:
program z158687;
{$I-}
const
n = 7;
type
elem1 = Real;{тип элементов в массиве}
elem2 = Word;
tmas1 = array[1..n,1..n] of elem1;{массив дробных чисел (для задачи 1)}
tmas2 = array[1..n,1..n] of elem2;{массив целых чисел (для задачи 2)}

{Задача №1}
procedure fill1(var mas:tmas1);
var i,k:byte;
begin
Randomize;
For i := 1 to n do
For k := 1 to n do
mas[i,k]:=Random(100)+1;{заполняем числами от 1 до 100}
end;
procedure z1(var mas:tmas1; k:byte);
var i:byte;
begin
For i := 1 to n do
mas[k,i] := mas[k,i]/mas[k,k];{Если надо поделить на элемент главной диагонали}
{ mas[k,i] := mas[k,i]/mas[k,n-k+1];{Если надо поделить на элемент побочной диагонали}}
end;
procedure vivod1(mas:tmas1);
var i,k:byte;
begin
For i := 1 to n do
begin
For k := 1 to n do
Write(mas[i,k]:6:2,' ');{выводим массив}
WriteLn;
end;
end;

{Задача №2}
procedure fill2(var mas:tmas2);
var i,k:byte;
j:word;
begin
j:=1;
{заполняем часть массива, находящуюся ниже главной диагонали (и главную диагональ)}
For k := 1 to n do
For i := 1 to k do
begin
mas[n-i+1,k-i+1]:=j;
inc(j);
end;
{выше главной диагонали}
For i := n-1 downto 1 do{перебираем строки от n-1 до первой}
For k := n downto n-i+1 do{перебираем столбцы от последнего до n - №строки}
begin
mas[i-(n-k),k]:=j;
inc(j);
end;
end;
procedure vivod2(mas:tmas2);
var i,k:byte;
begin
For i := 1 to n do
begin
For k := 1 to n do
Write(mas[i,k]:3,' ');{выводим массив}
WriteLn;
end;
end;

{Задаяа №3}
Function z3(var f:Text):String;
const Sogl1:String = 'bcdfghjklmnprstvwxz';{список согласных букв в алфавитном порядке}
Sogl2:String = 'BCDFGHJKLMNPRSTVWXZ';
var symb:char;
begin
While (not EOF(f))and(length(Sogl1)>0) do{перебираем файл}
begin
Read(f,symb);
IF pos(symb,Sogl1)>0 then{если нашли строчную согласную - удаляем её из списка}
begin
delete(Sogl2,pos(symb,Sogl1),1);
delete(Sogl1,pos(symb,Sogl1),1);
end
Else
IF pos(symb,Sogl2)>0 then{если нашли заглавную согласную - удаляем её из списка}
begin
delete(Sogl1,pos(symb,Sogl2),1);
delete(Sogl2,pos(symb,Sogl2),1);
end;
end;
z3:=Sogl1;
end;

{основная часть}
var mas1:tmas1;mas2:tmas2;
k:byte;
FileName:String;
f:Text;
begin
{задача №1}
WriteLn('task 1:');
fill1(mas1);
vivod1(mas1);
Write('Enter k from 1 to ',n,': ');
ReadLn(k);
z1(mas1,k);{заполняем массив как надо}
vivod1(mas1);{выводим массив}
{задача №2}
WriteLn('task 2:');
fill2(mas2);{заполняем массив}
vivod2(mas2);{выводим массив}
{Задача №3}
WriteLn('task 3:');
Write('Enter name of file: ');
ReadLn(FileName);
Assign(f,FileName);
Reset(f);
IF IOResult = 0 then
begin
WriteLn(z3(f));
Close(f);
end
Else
WriteLn('File not found: ',FileName);
ReadLn;
end.
давно
Старший Модератор
31795
6196
26.01.2009, 17:06
общий
это ответ
Здравствуйте, Edise!

Четвертая задача в приложении.
Строка результата выглядит так:
'One:' , indexOne, - счетчик певого слова;
' Two:' , indexTwo, - счетчик второго слова;
' One after Two:' , indexOneTwo, - счетчик количества комбинаций, когда первое слово следует за вторым;
' Two after One:' , indexTwoOne - счетчик количества комбинаций, когда второе слово следует за первым.
Оператор
[b]case[/b] c [b]of[/b]{проверяем разделители и регистр букв}
'.',',',':','-','!','"','/','*','+','=','%':c:=' ';
'A'..'Z':c:=chr(ord(c)+32);
[b]end[/b];

выполняет две функции:
- приводит все слова к одному регистру т.е. к примеру: The = the;
- все знаки препинания преобразовывает в пробел - единственный стандартный разделитель для всех слов, в этой строке Вы можете добавить свои знаки или убрать лишние.
Вопросы по программе задавайте в мини-форум.

Удачи!

Приложение:
var
c:char;
one,two,last_word,next_word:string;
indexOne,indexTwo,indexOneTwo,indexTwoOne:integer;
isFile:text;
begin
{счутчики слов}
indexOne:=0;
indexTwo:=0;
indexOneTwo:=0;
indexTwoOne:=0;
{вводим первое слово}
repeat
write('Enter first word:');
readln(one);
until length(one)>0;
{вводим второе слово}
repeat
write('Enter second word:');
readln(two);
until length(two)>0;
writeln(':',one,':',two,':');
{октрываем файл}
assign(isFile,'help.txt');
reset(isFile);
next_word:='';
while not eof(isFile)do
begin
{запоминаем предыдущее слово}
last_word:=next_word;
next_word:='';
{считываем слово}
repeat{цикл считывания одного слова}
repeat{цикл игнорирования разделителей стоящий перед словом}
read(isFile,c);
case c of{проверяем разделители и регистр букв}
'.',',',':','-','!','"','/','*','+','=','%':c:=' ';
'A'..'Z':c:=chr(ord(c)+32);
end;
until (c<>' ')or(length(Next_word)>0)or(eof(isFile));
if c<>' 'then next_word:=next_word + c;{если не пробел, то добавляем символ в слово}
until (c=' ')or(eof(isFile));
{контролируем нужные параметры}
inc(indexOne,ord(one=next_word));
inc(indexTwo,ord(two=next_word));
inc(indexOneTwo,ord((one=last_word)and(two=next_word)));
inc(indexTwoOne,ord((two=last_word)and(one=next_word)));
end;
{выводим результат работы}
write('One:',indexOne,' Two:',indexTwo,' One after Two:',indexOneTwo,' Two after One:',indexTwoOne);
close(isFile);
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа