Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2012, 15:39   #1
415Илья
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 4
По умолчанию Pascal ABC Матрица

Помогите пожалуйста,составил программу, я не знаю в чём ошибка..напишите исправленную версию,если несложно,я в паскале не ас,его впервые увидел только когда пришёл в институт=) Вот задание : Дана матрица A(5;3). 1)Найти строку содержащую минимальный элемент матрицы. 2)Найденную строку поменять местами с 4-ой строкой.3)В полученной матрице подсчитать сумму для элементов 3-ей строки по формуле:S:=S+sqrt(abs(1.2+a[3,j])).Программа:
Код:
Program PoiskMin;
Const
 m=5;n=3;     {число строк и столбцов}
 Type
  arrA=array[1..m,1..n]of real; {описание типа массива}
  Var     {описание переменных}
  A:arrA;
  i,j,imin,jmin: byte;
  R,min:real;
 {процедура ввода элементов массива}
Procedure VVOD(var a:arrA;m,n: byte);
Begin
 for i:=1 to m do
 begin
 for j:=1 to n do
 read(a[i,j]);
 writeln;
 end;
 End ;
{процедура поиска минимального элемента матрицы}
Procedure AMIN(var A:arrA;m,n:byte;var imin,jmin:byte);
Var
min:real;
Begin
min:=1e10;
for i:=1 to m do
for j:=1 to n do
if(A[i,j]<min) and (A[i,j]<0)then
begin
min:=A[i,j]; imin:=i;jmin:=j;
end;
End;
{Обращение к процедуре}
Begin
for j:=1 to 3 do {Цикл по столбцам}
begin
R:=A[imin,j];
A[imin,j]:=A[4,j];
A[4,j]:=R
end;

Program SumString;
Type
arrA=array[1..5,1..3] of real;
Const
A:arrA=((1,2,3),(4,5,6),(7,8,9),(10,11,12),(13,14,15));
Var
i,j: byte;
S:real;
Begin
S:=0;
i:=3; {номер строки}
for j:=1 to 3 do {цикл по столбцам}
S:=S+sqrt(abs(1.2+a[3,j]))
writeln('Сумма 3-й строки S=', S:6:2);
End.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.11.2012 в 15:52.
415Илья вне форума Ответить с цитированием
Старый 06.11.2012, 20:08   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
if(A[i,j]<min) and (A[i,j]<0)then
К чему тут этот and A[i]<0? У Вас таким образом условие выполнится только для отрицательных элементов, а если в матрице их нет? И, кстати, найти нужно только строку, а не сам элемент.

Далее. Судя по заданию, все операции Вам нужно проделать в одной программе, а Вы написали две, причем в первой массив вводите, а во второй - задаете программно.

Вот тут:

Код:
{Обращение к процедуре}
Begin
for j:=1 to 3 do {Цикл по столбцам}
раз уж ввели константы - так используйте их до конца:

Код:
for j:=1 to n do
В программе SumString:

Код:
i:=3; {номер строки}
далее нигде не используется - выбросите ее.

И вообще, оформите каждое подзадание в виде процедуры/функции и вызывайте из основного кода программы.


P.S. Для неАса в Паскале довольно неплохо. Я тоже увидел этот ЯП в институте, но вот так писать научился не очень быстро... Впрочем, нас по теории почти полсеместра гоняли, прежде чем за штурвал... пардон, за компы посадить)

Думаю, Вам не надо готовый переделанный правильно код, достаточно будет моих замечаний. Удачи!
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 06.11.2012 в 20:11.
Sciv вне форума Ответить с цитированием
Старый 07.11.2012, 20:29   #3
415Илья
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 4
По умолчанию

Sciv,cпасибо за наводки, сейчас пробую сделать.. но опять ничего не получается, в задачнике с похожими примерами есть только программа в которой находить минимальное значение, а как выводить всю строчку в которой находится этот элемент-нет(( как оформить подзадание в виде продседуры или функции и объединить эти две программы в одну-тоже нет((( нам выдали отсканированную небольшую брошурку,в которой всё очень кратко дано, только в виде одних примеров решённых заданий и сказали если чего то в ней не хватает по нашим заданиям- нужно искать дополнительные материалы где угодно, с 2-мя программами разобрался как то сам и сделал их, а с этой не знаю что и делать.. Посоветуйте какую-нибудь подробную книгу по паскалю в которой всё описывается с подробностями для решения таких усложнённых задач и если не сложно исправьте эту программу, я на самом деле в написании программ практически 0
415Илья вне форума Ответить с цитированием
Старый 07.11.2012, 21:53   #4
415Илья
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 4
По умолчанию

несколько недочётов исправил,но программа всё равно не работает, как мне её исправить???
Код:
Program PoiskMin;
Const
 m=5;n=3;     {число строк и столбцов}
 Type
  arrA=array[1..m,1..n]of real; {описание типа массива}
  Var     {описание переменных}
  A:arrA;
  i,j,imin,jmin: byte;
  R,min:real;
 {процедура ввода элементов массива}
Procedure VVOD(var a:arrA;m,n: byte);
Begin
 for i:=1 to m do
 begin
 for j:=1 to n do
 read(a[i,j]);
 writeln;
 end;
 End ;
{процедура поиска минимального элемента матрицы}
Procedure AMIN(var A:arrA;m,n:byte;var imin,jmin:byte);
Var
min:real;
Begin
min:=1e10;
for i:=1 to m do
for j:=1 to n do
if(A[i,j]<min)then
begin
min:=A[i,j]; imin:=i;jmin:=j;
end;
End;
{Обращение к процедуре}
Begin
for j:=1 to 3 do {Цикл по столбцам}
begin
R:=A[imin,j];
A[imin,j]:=A[4,j];
A[4,j]:=R
end;
Begin
for j:=1 to 3 do
A:arrA:=array[1..5,1..3] of real;
Const
A:arrA=((1,2,3),(4,5,6),(7,8,9),(10,11,12),(13,14,15));
Var
i,j: byte;
S:real;
Begin
S:=0;
i:=3; {номер строки}
S:=S+sqrt(abs(1.2+a[3,j]))
writeln('Сумма 3-й строки S=', S:6:2);
End.
415Илья вне форума Ответить с цитированием
Старый 08.11.2012, 06:55   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Однозначно если по Паскалю - Фаронов, "Турбо-Паскаль 7.0" Здесь, на форуме, в списке литературы ищите - 100% есть, книга старая, но полнее и лучше ее я не встречал.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 08.11.2012, 07:17   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Program PoiskMin;
Const m=5;n=3;     {число строк и столбцов}
Type  arrA=array[1..m,1..n]of real; {описание типа массива}

Var A:arrA;  {описание переменных}

 {процедура ввода элементов массива}
Procedure VVOD;       {Поскольку сам массив-глобальная переменная, а m,n 
                                -глобальные константы, я их исключил из параметров процедуры}
var i,j: integer;
Begin
  for i:=1 to m do 
    for j:=1 to n do begin
      Write('Введите элемент массива а[',i,',',j,']: ');
      readln(a[i,j]);
    end;
End ;

{Функция поиска строки с минимумом. НА выходе - номер строки}
Function MinStr: integer;
var i,j: integer;
     mins: integer;
     min: real;
begin
  min:=a[1,1];
  mins:=1;
  for i:=1 to m do
    for j:=1 to n do
      if a[i,j]<min then begin
        mins:=i;
        min:=a[i,j];
      end;
  MinStr:=mins;
end;

{Процедура замены строк. str1, str2 - номера строк для замены}
Procedure StrReplace(str1,str2: integer);
var j: integer;
begin
  For j:=1 to n do begin
    a[str1,j]:=a[str1,j]+a[str2,j]; {Классический вариант смены значений без ввода 
                                              дополнительной переменной: a:=a+b}
    a[str2,j]:=a[str1,j]-a[str2,j];  {b:=a-b}
    a[str1,j]:=a[str1,j]-a[str2,j];  {a:=a-b}
  end;
end;

{Функция подсчета суммы строки s}
Function SumStr(s: integer): real;
var j: integer;
    sum: real;
begin
  sum:=0;
  For j:=1 to n do sum:=sum+sqrt(abs(1.2+a[s,j]));
  SumStr:=sum;
end;

{Процедура вывода массива}
Procedure OutArray;
var i,j: integer;
begin
  for i:=1 to m do begin
    for j:=1 to n do Write(a[i,j]:2:2,' ');
    WriteLn;
  end;
end;

{Основная программа}
begin
  Vvod;
  WriteLn('Исходный массив: ');
  OutArray;
  WriteLn;
  WriteLn('Номер строки с минимумом: ',MinStr);
  WriteLn;
  StrReplace(MinStr,4);
  WriteLn('Массив после замены строк: ');
  OutArray;
  WriteLn;
  WriteLn('Сумма элементов 3-ей строки: ',SumStr(3):2:2);
  ReadLn;
end.

Как-то так в общем. Где какие недочеты, опечатки или ошибки - отладите при компиляции
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 08.11.2012 в 09:03.
Sciv вне форума Ответить с цитированием
Старый 08.11.2012, 14:26   #7
415Илья
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 4
По умолчанию

Sciv, большое спасибо вам за помощь,очень сильно выручили!!! Буду учиться делать подобные задания сам.
415Илья вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица и не равно в ABC pascal - решение СУДОКУ zzzzza Паскаль, Turbo Pascal, PascalABC.NET 29 09.04.2012 15:34
Программы в Pascal, среда pascal ABC. Лабораторные работы Одинокая Волчица Фриланс 8 10.02.2012 20:09
Неудобство ABC Pascal и глюк Borland Pascal proser93 Помощь студентам 0 19.11.2011 19:01
(PASCAL ABC)Дана Матрица, найти индексы всех эл-ов с наибольшим значением, если таких элементов несколько Grandhustla Помощь студентам 0 25.05.2011 16:06
Turbo Pascal or Pascal ABC Ikram Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 13:44