Помощь - Поиск - Пользователи - Календарь
Полная версия: намекните на решение
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ex1Le
1)Нарастающий итог. Каждый элемент aij матрицы A(m,n) заменить суммой элементов подматрицы A'(i,j), расположенной в левом верхнем углу матрицы А.

вопросы : 1.как самому задавать числа матрицы
2. как задавать подматрицу...
3. как заменить элементы на сумму

2)Среди элементов массива Z(m) найти k (k<<m) наибольших. Поиск осуществить за один проход (просмотр) массива Z.

вопросы : 1. на самом деле я даже условие понять не могу sad.gif
2. как задавать поиск

3)Сессия. Результаты сессии, состоящей из трех экзаменов, для группы из n студентов представлены матрицей K(n,3). Оценка ставится по четырехбалльной системе; неявка обо-значается единицей. Подсчитать количество неявок, неудовлетворительных, удовлетвори-тельных, хороших и отличных оценок по каждому экзамену.

вопросы : 1. поиск и вывод его....

4) Задана матрица A(k,l). Найти вектор B(l), каждый элемент которого равен среднему арифметическому элементов соответствующего столбца матрицы А.

вопросы : 1. как присвоить элементам вектора среднее арифметич....
klem4
GoTo FAQ: Матрицы

+ пользуйся поиском по форуму, задач на массивы решено уйма!
Ex1Le
к 4й задаче .....че то я намудрил sad.gif еще и не пашет sad.gif

program  vektor;
const nmax=10;
     nmmax=10;
var
n,nm : integer;
vector : array[1..nmmax] of real;
matrix:array[1..nmax,1..nmmax] of real;
i,j:integer;
k:real;
begin
writeln('razmer matrici: ';
readln(n,nm);
if ((n>1) and (nm>1)) or (nm>nmmax) or (n>nmax) then
begin
writeln('vvod matrici';
for j:=1 to nm do
for i:=1 to n do
begin
write('matrix[',i,',',j,']:';
readln(matrix[i,j]);
end;
for j:=1 to nm do
begin
k:=0;
for i:=1 to n do
k:=k+matrix[i,j];
k:=k/n;
vektor[j]:=k;
end;
write('[';
for i:=1 to nm do write(vector[i]:5 :2,',';
writeln(vector[nm:5 :2,']';
end.


klem4
Ошибки были в синтаксисе везде...
поправил что смог ;) теперь хоть компилируется smile.gif

program  vektor;
const nmax=10;
nmmax=10;
var
n,nm : integer;
vector : array[1..nmmax] of real;
matrix:array[1..nmax,1..nmmax] of real;
i,j:integer;
k:real;
begin
writeln('razmer matrici : ');
readln(n,nm);

writeln('vvod matrici ');
for j:=1 to nm do
for i:=1 to n do
begin
write('matrix[',i,',',j,']: ');
readln(matrix[i,j]);
end;
for j:=1 to nm do
begin
k:=0;
for i:=1 to n do
k:=k+matrix[i,j];
k:=k/n;
vector[j]:=k;
end;

for i:=1 to n do
begin
writeln;
for j:=1 to nm do
write(matrix[i,j]:2 :1,' ');
end;

writeln;
for i:=1 to nm do writeln(vector[i]:5 :2);
readln;

end.

Ex1Le
обьясните мне пожалуйста вторую задачу...я не то, чтобы не знаю как делать - я ее вообще не понял что там от меня хотят....
volvo
Цитата(Ex1Le @ 25.05.05 23:01)
обьясните мне пожалуйста вторую задачу... я ее вообще не понял что там от меня хотят....

Что имеем по условию?
Цитата(Ex1Le @ 24.05.05 22:04)
2)Среди элементов массива Z(m) найти k (k<<m) наибольших. Поиск осуществить за один проход (просмотр) массива Z.

Значит, имеется массив (для простоты будем считать что из 10 элементов, хотя на самом деле их будет ГОРАЗДО больше)
Допустим, <1, 4, 8, 5, 2, 9, 4, 5, 7, 2>
в этом массиве тебе нужно найти K наибольших чисел: например при К=2, должен найти <9 и 8> это 2 самых больших числа в массиве. При К = 4: <9, 8, 7 и 5>
Но в задании указано что M гораздо больше K, то есть М может быть 1000 а К = 4, например. И этот поиск нужно осуществить за один проход по массиву...
Ex1Le
тогда решение пойдет так - берем число и сравниваем с другим..запоминаем большее и сравниваем его с третьим и т.д. и т.п....но тогда проходов получится столько, сколько наибольших чисел надо найти...а как за 1 проход сделать ?
volvo
В этом и заключается смысл задачи... Думай...
Ex1Le
Цитата(volvo @ 26.05.05 0:18)
В этом и заключается смысл задачи... Думай...


я думаю надо сделать сортировку по уменьшению...и тогда из получившегося массива взять n чисел слева.... ( если я правильно FAQ понял то это qsort, вот токо не понял как ей пользоваться.... )
volvo
:no: А я думаю, что и сортировкой нельзя пользоваться. Ибо даже если тебе и удастся отсортировать массив за 1 проход по нему (в чем я сильно сомневаюсь), то взятие K элементов слева будет уже вторым проходом...
Ex1Le
Цитата(volvo @ 26.05.05 0:27)
:no: А я думаю, что и сортировкой нельзя пользоваться. Ибо даже если тебе и удастся отсортировать массив за 1 проход по нему (в чем я сильно сомневаюсь), то взятие K элементов слева будет уже вторым проходом...

но этот проход-то будет уже по другому массиву... huh.gif или же я как всегда ничего не понимаю....
volvo
Ну, насколько я понял условие нужно все сделать в ОДНОМ массиве. Иначе в чем вообще смысл задачи?
Ex1Le
ткните пожалуйста меня носом где можно про это прочитать ( весь FAQ пролистал несколько раз...нашел токо как найти один наибольший....) да и поиск че-то результатов не дал sad.gif
volvo
А такой задачи еще не было, так что придется тебе ее самому решать... :yes:
Ex1Le
это последняя задача для автомата sad.gif нашел как сделать за несколько проходов...НО НАДО ЗА ОДИН !!!!!!. я даже понять не могу ...sad.gif

Знаешь, что? Если тебе нужен автомат - думай... Если не хочешь (или не можешь) придумать - иди, и сдавай экзамен как все. Автоматы просто так не ставятся...
Ex1Le
я же не прошу взять и написать мне ее....просто обьяснить как это можно сделать за 1 проход..... но наверно я вас уже достал.... короче забейте.... я прекрасно понимаю что мои проблемы никого не волнуют


ВСЕМ СПАСИБО ЗА ПОМОЩЬ
Ex1Le
ЕСТЬ !!!! понеял как решать...осталось самое малое sad.gif написать прогу.... идет короче так... есть массив...из него берем k чисел...затем мы следующее число, не в ходящее в к сравниваем с числами массива к и если оно больше какого-то числа то заменить...число которое заменили отбрасывается...и берется следующее число и опять сравнивается с массивом и так далее...... осталось написать sad.gif
volvo
Ну, так в чем проблема?
const
n = 10;
k = 2;
arr: array[1 .. n] of integer =
(1, 4, 8, 5, 2, 9, 4, 5, 7, 2);

var
maxs: array[1 .. k] of integer;
i: integer;

procedure check(x: integer);
var i, min_ix: integer;
begin
min_ix := 1;
for i := 2 to k do
if maxs[min_ix] > maxs[i] then min_ix := i;
if maxs[min_ix] < x then maxs[min_ix] := x;
end;

begin
for i := 1 to k do maxs[i] := arr[i];

for i := succ(k) to n do
check(arr[i]);

for i := 1 to k do
writeln(maxs[i]);
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.