• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль. Действия над матрицами

  • Автор темы Автор темы LiL_JoN
  • Дата начала Дата начала

LiL_JoN

Ученик
Регистрация
27 Июн 2011
Сообщения
7
Реакции
0
Баллы
0
Паскаль. Действия над матрицами

Прошу помочь с заданием.
Матрица A[4] [4]. Найти минимальный элемент во 2-ой строке и разделить на него элементы главной диагонали.
 
Делить на каждый элемент главной диагонали и вывести одним числом, или на каждый последовательно? Или может на их сумму/произведение? Задание дано неточно.
И в чем трудности? Задача простейшая на самом деле.
 
На каждый элемент главной диагонали и вывести одним числом, или на каждый последовательно? Или может на их сумму/произведение? Задание дано неточно.
И в чем трудности? Задача простейшая на самом деле.
Да нет, Лёша, ты просто не вчитался - формулировка там нормальная. Сперва ищется минимальный элемент второй строки, а потом все элементы главной диагонали делятся на найденное число. Единственное, а вдруг этим минимумом окажется ноль - что тогда?
 
А, да, правда невнимательно.. Разделить НА НЕГО, а не ЕГО НА. Виноват. Но тем и задача проще..
 
program matrica;
uses crt;
const n=4;
type
matr=array[1..n,1..n] of integer;
var
a :matr:
min :integer:
i,j:byte;
begin
clrscr;
writeln('vvedite a[4,4]:');
for i:=1 to n do
for j:=1 to n do
begin
write ('a[',i,',',j,']=');
read (a[i,j]);
end;
writeln(^M^J,'Minimum=',min);
readln;
repeat until keypressed;
end.



УМОЛЯЮ ПОМОГИТЕ ВСТАВИТЬ ОПЕРАЦИЮ ПО УМНОЖЕНИЮ ЭЛЕМЕНТОВ ГЛАВНОЙ ДИАГОНАЛИ НА МИНИМУМ, прога работает нормально, минимум выдает, а вот с умножением трудности, пожалуйста помогите
 
Код:
writeln('VVedite matrix ');
  for i:= 1 to 10 do
    for j:= 1 to 3 do
      read(A[i,j]);
  for i:= 1 to 10 do
  begin
    for j:= 1 to 3 do
      write(A[i,j], ' ');
  writeln;
  end;

как получилось у меня
 
ошиблась, вот он:

program matrica;
uses crt;
const n=4;
type
matr=array[1..n,1..n] of real;
var
a :matr;
min :real;
i,j:byte;
begin
clrscr;
{Vvodim matricu}
writeln('VVedite matricu ');
for i:= 1 to n do
for j:= 1 to n do
read(A[i,j]);

{Poisk minimuma }

min:=A[2,1];
for i:=1 to n do begin
for j:=1 to n do begin
if A[2,j]<=min then min:=A[2,j]
end;
end;
writeln;
writeln('Minimum raven: ', min:5:1, #10#13);

{Glavnyu diagonal delem na min}

for i:= 1 to n do
begin
for j:= 1 to n do
if i = j then
A[i,j]:=A[i,j] / min;
end;

{Vivodim matricu}
for i:=1 to n do
begin
for j:=1 to n do
write(A[i,j]:2:1, ' ' );
writeln;
end;

repeat until keypressed;

end.
 
Писала для предыдущей темы, где вы вначале просили поделить главную диагональ на минимум. Если все-таки надо умножить, то в 11 строчке снизу вместо / поставить *.
 
УМОЛЯЮ ПОМОГИТЕ ВСТАВИТЬ ОПЕРАЦИЮ ПО УМНОЖЕНИЮ ЭЛЕМЕНТОВ ГЛАВНОЙ ДИАГОНАЛИ НА МИНИМУМ, прога работает нормально, минимум выдает, а вот с умножением трудности, пожалуйста помогите
Извините - не верю! (как говаривал К.С.Станиславский). Не может "прога" нормально работать, имея столько ошибок. И как она "выдает минимум", если никакого поиска минимума там просто нет?
program matrica;
uses crt;
const n=4;
type
matr=array[1..n,1..n] of integer;
var
До сюда всё более ли менее.
Грубейшие ошибки!!! Вместо разделителя "точка с запятой" в конце строк поставлены двоеточия. Такого ни один транслятор не пропустит!
i,j:byte;
begin
clrscr;
writeln('vvedite a[4,4]:');
for i:=1 to n do
for j:=1 to n do
begin
write ('a[',i,',',j,']=');
Нормально.
Не буду вдаваться в подробности, но в таких случаях НАСТОЯТЕЛЬНО рекомендую использовать не read, а именно readln.
end;
writeln(^M^J,'Minimum=',min);
Так. А вот это уже серьезно.
1. На хрена, извините за грубость, вы сюда вкатали запись в непонятно куда, да еще с динамической адресацией? Самое смешное, что ошибок вроде не выдает, и даже на экран выводит - вот только зачем? Сдвиг от края?
2. Где и когда, покажите пальцем, у Вас присваиваются хоть какие-то значения переменной min? Естественно, всегда выводится 0. Вы ЭТО имели в виду?
readln;
repeat until keypressed;
Если бы Вы использовали при вводе readln, а не read, то было бы достаточно одного из остановов - либо readln, либо repeat until keypressed (кстати, можно вместо этих трех слов поставить просто readkey).
С учетом вышесказанного, задачу можно решить, например, так:
Код:
program matrica;
uses crt;
const n=4;
type
 matr=array[1..n,1..n] of integer;
var
 a:matr;
 min :integer;
 i,j:byte;
begin
 clrscr;
 min:=32000;
 writeln('vvedite a[4,4]:');
 for i:=1 to n do
  for j:=1 to n do
   begin
    write ('a[',i,',',j,']= ');
    readln (a[i,j]);
    If (i=2) and (a[i,j]<min) then min:=a[i,j];
   end;
 writeln;
 for i:=1 to n do
  begin
   for j:=1 to n do
    write (a[i,j]:8);
   writeln;
  end;
 writeln;
 writeln('Minimum= ',min);
 writeln;
 For i:=1 to n do a[i,i]:=a[i,i]*min;
 for i:=1 to n do
  begin
   for j:=1 to n do
    write (a[i,j]:8);
   writeln;
  end;
 readln
end.
 
2Severina
Уважаемая Severina, посмотрел Вашу программу, всё, в принципе, хорошо, кроме:
1. Замечание насчет ввода по Read и тут в силе; лучше Readln - не будет "сюрпризов".
2. Это не ошибка, и всё правильно, но зачем же так витиевато? Я имею в виду вот это:
for i:= 1 to n do
begin
for j:= 1 to n do
if i = j then
A[i,j]:=A[i,j] / min;
end;
Ведь то же самое можно записать куда как короче:
for i:= 1 to n do A[i,i]:=A[i,i] / min;
И всё!
 
Уважаемый Vladimir_S,
Спасибо за указание некоторых неточностей.
На счет Read(ln), да, один из маленьких нюансов, в котором, как и в Write(ln) у меня иногда бывают казусы. Периодически ищу ошибку, а надо только это и исправить.
И на счет 2.
В виду своей неопытности побоялась так делать, хотя размышления были.

Еще раз спасибо за комментарий к програмке, учту Ваши замечания.
 
Назад
Сверху