Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 66
от 07.06.2005, 21:00

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 5


Вопрос № 21661: Мастера помогите пожалуйста с решением задач. В первой задаче загнался на том как заменить символы и напечатать матрицу. Во второй тоже какая-то ошибка. Выкладываю свои наработки. Заранее благодарен. 1. Матрица 5на5 . Напечатать минимальны...
Вопрос № 21677: Уважаемые Экспрты есть задачка. Дана строка. Словом текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова текста, кот...

Вопрос № 21.661
Мастера помогите пожалуйста с решением задач. В первой задаче загнался на том как заменить символы и напечатать матрицу. Во второй тоже какая-то ошибка. Выкладываю свои наработки. Заранее благодарен.
1. Матрица 5на5 .
Напечатать минимальные элементы всех столбцов матрицы в убывающем порядке .
2. С использованием одномерных массивов.
15- колво элементов последовательности которые генерируются в промежутке[-20;20] .
Напечатать матрицу ,элементами главной диагонали которой явл-ся макс элементы соответствующих строк исходной матрицы.

Приложение:

Отправлен: 02.06.2005, 10:55
Вопрос задала: Vladon (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Ayl
Здравствуйте, Vladon!
Так. Ну, то, что ты написал в первом примере - это даже не набросок, а ни пойми что. Во-первых, не закончено. Во-вторых, даже структура программы не соблюдена. readln вызывается перед begin. begin зачем-то завершается двоеточием. Два пустых цикла по i и j.
К тому же ты, похоже, перепутал порядок заданий.
По второй программе есть несколько замечаний. Во-первых, зачем тебе переменная count? Она используется только при присваивании начального значения и больше нигде не используется.
Во-вторых, выражение random (20) - 10 вернет число из диапазона [-10, 10]. Тебе надо использовать выражение random (40) - 20 для получения числа из диапазона [-20, 20].
В-третьих, мне не нравится твоя сортировка. Похоже, что она правильная, но мне не нравится. Слишком много лишних проверок. Классический "пузырек" для сортировки по возрастанию выглядит так:
for i := 1 to N-1 do
for j := i + 1 to N do
if a [i] > a [j] then begin
k := a [i];
a [i] := a [j];
a [j] := k;
end;
Но вообще-то, по заданию тебе нужно печатать их в убывающем порядке, т.ч. условие проверки надо инверсировать.
К тому же, сортировка вообще лишнее действие, можно сразу же формировать массив в нужном порядке при добавлении очередного элемента. Вместо M[i] := min можно написать так:
k := 1;
while k < i do
if M [k] > min then break else Inc (k);
for l := k to i - 1 do
M [l + 1] := M [l];
M [k] := min;
и ты сразу же получаешь отсортированный в нужном порядке массив.
Теперь по поводу задания номер 2. Что-то я никак не могу врубиться в то, что у тебя написано. Как-то все намешано в кучу. Причем тут 15 и кол-во элементов последовательности? Одномерные массивы и матрица? В общем, не совсем понятно.
Остановимся на такой постановке:
Заполнить матрицу 5*5 случайными значениями из диапазона [-20, 20]. Распечатать матрицу, элементами главной диагонали которой явл-ся максимальные элементы соответствующих строк исходной матрицы
Вот алгоритм и удобные типы для работы:
Const N = 5;
TRow = array [1..N] of Real; { строки исходной матрицы }
TMatrix = array [1..N] of TRow; { исходная матрица }
TMaxElem = array [1..N] of Real; { максимальные элементы строк исходной матрицы }
TRowOrder = array [1..N] of Byte; { порядок строк новой матрицы }
1. Заполнить матрицу числами из диапазона [-20, 20] - аналогично тому, как сделано у тебя в предыдущем примере.
2. Для всех строк матрицы определить максимальный элемент и занести его в массив TMaxElem - можно сделать с помощью функции, которая принимает на вход переменную типа TRow.
3. Заполнить массив TRowOrder. Это можно делать либо сразу же при выполнении шага 2, либо отдельно, запуская сортировку (только при этом сам массив TMaxElem изменять не нужно, а нужно переставлять только индексы в массиве TRowOrder)
4. Распечатать матрицу по строкам согласно индексам из TRowOrder:
m : TMatrix;
r : TRowOrder;
...
for i := 1 to N do
begin
k := r [i];
for j := 1 to N do
write (' ', m [k, j]);
writeln;
end;
Если будут вопросы - спрашивай.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 02.06.2005, 12:08

Отвечает: Malish
Здравствуйте, Vladon!
1)
uses crt;
const N=5;
var
Mat: array [0..N-1,0..N-1] of integer;
Vect : array [0..N-1] of integer;
i,j : integer;
flag : boolean;
Temp :integer;
begin
randomize;
clrscr;
for i:=0 to N-1 do
for j:=0 to N-1 do
Mat[i][j]:=random(9);
for i:=0 to N-1 do
begin
for j:=0 to N-1 do
Write(Mat[i][j],' ');
writeln;
end;
writeln;
for j:=0 to N-1 do
begin
Vect[j]:=Mat[0][j];
for i:=1 to N-1 do
if Vect[j]>Mat[i][j] then
Vect[j]:=Mat[i][j];
end;
for i:=0 to N-1 do
Write(Vect[i],' ');
writeln;
{----------Sortirovka---------}
flag:=true;
i:=0;
j:=0;
for j:=1 to maxint do
begin
for i:=0 to (N-1)-j do
if Vect[i] begin
Temp:=Vect[i];
Vect[i]:=Vect[i+1];
Vect[i+1]:=Temp;
flag:=false;
end;
if flag then
break;
flag:=false;
end;
for i:=0 to N-1 do
Write(Vect[i],' ');
writeln;
readln;
end.
2)
uses crt;
const N=5;
var
Mat: array [0..N-1,0..N-1] of integer;
Vect : array [0..N-1] of integer;
i,j : integer;
flag : boolean;
Temp :integer;
begin
randomize;
clrscr;
for i:=0 to N-1 do
for j:=0 to N-1 do
Mat[i][j]:=random(21)-10;
for i:=0 to N-1 do
begin
for j:=0 to N-1 do
Write(Mat[i][j],' ');
writeln;
end;
writeln;
for j:=0 to N-1 do
begin
Vect[j]:=Mat[j][0];
for i:=1 to N-1 do
if Vect[j] Vect[j]:=Mat[j][i];
end;
for i:=0 to N-1 do
Write(Vect[i],' ');
writeln;
writeln;
for i:=0 to N-1 do
begin
for j:=0 to N-1 do
begin
if i=j then
Mat[i][j]:=Vect[i]
else
Mat[i][j]:=0;
write(Mat[i][j],' ');
end;
writeln;
end;
readln;
end.
Ответ отправил: Malish (статус: Студент)
Отправлен: 02.06.2005, 17:37

Отвечает: sniv
Здравствуйте, Vladon!
I.
uses crt;
const
m=5;
type
tArr=array[1..m,1..m]of real;
var a:tArr;i,j:integer;
procedure Sort(var arr:tArr;v:integer);
var buff,min:real;t,k:integer;
begin
t:=m;k:=1;
repeat
if arr[v,t]>arr[v,t-1]then
begin
buff:=arr[v,t];
arr[v,t]:=arr[v,t-1];
arr[v,t-1]:=buff;dec(k);
end else inc(k);
dec(t);
if t=1 then t:=m;
until k=m;
end;
Begin
ClrScr;
{...двухмерный масив с исходными значениями (чтение из файла, random...)...}
for i:=1 to m do
begin
Sort(a,i);
end;
ReadKey
End.
II.
uses crt;
const
m=5;
var arr,arr1:array[1..m,1..m]of integer; {arr-исходная матрица, arr1-конечная матрица}
Max:array[1..m];i,j:integer;
Begin
ClrScr;
Randomize;
for i:=1 to m do
begin
for j:=1 to m do arr[i,j]:=random(41)-20;
end;
for i:=1 to m do
begin
Max[i]:=arr[i,1];
for j:=1 to m do
begin
if arr[i,j]>Max[i] then Max[i]:=arr[i,j];
end;
end;
for i:=1 to m do
begin
for j:=1 to m do
begin
arr1[i,j]:=0; {в примере создается диагональная матрица...}
arr1[i,i]:=Max[i];
if i=j then TextColor(yellow)else TextColor(white);{для красоты...}
Write(arr1[i,j],' ');
end;
WriteLn;
end;
ReadKey
End.
Ответ отправил: sniv (статус: 1-ый класс)
Отправлен: 04.06.2005, 18:32


Вопрос № 21.677
Уважаемые Экспрты есть задачка.
Дана строка. Словом текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова текста, которые содержат только большие буквы алфавита. Все остальные слова удалить.
Если возможно написать только процедуру редактирования строки
Отправлен: 02.06.2005, 17:25
Вопрос задала: Роман Павлович (статус: 1-ый класс)
Всего ответов отправлено: 2

Отвечает: Alex Diesel
Здравствуйте, Роман Павлович!<br>А в чем проблема? Идешь по строке. Находим первый симовл - если это большая буква - идем до следующего пробела, сохраняя слово, если нет, идем до следующего пробела, не сохрання слова. Находим следующий пробел, или точку ... если за проблелом большая буква, идием до следующего пробле сохраняя слово .. и так далее. В чем проблема?
Ответ отправил: Alex Diesel (статус: 7-ой класс)
Отправлен: 03.06.2005, 04:27

Отвечает: sniv
Здравствуйте, Роман Павлович!
В примере проверяются заглавные английские буквы в промежутке [#65;#90] русские заглавные буквы - [#128;#159]

Приложение:

Ответ отправил: sniv (статус: 1-ый класс)
Отправлен: 07.06.2005, 11:09


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться
Вспомнить пароль

В избранное