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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 15:52   #11
Lilen
Пользователь
 
Регистрация: 04.10.2012
Сообщений: 20
По умолчанию

ребят, спасибо большое) поначалу я не использовала массив 1..30000,1..30000, а гораздо меньше 100 на 100, но у меня чего-то не получалось, никак не могу разобраться со статистической и динамической памятью.

допустим, исправлю таким образом, снова ошибка. Чего ему опять не нравиться-то?

Код:
 
program borlpasc;
const n=3;
type mas=array[1..100,1..100] of integer;
var a:^mas; at:^integer;
i,j,k,max,m:integer;
 begin
 //writeln('vvedite razmernost matrizbI');
 //readln(n);
 write('vvedite nomer stroki m=');
 readln(k);

 NEW(a);
 for i:=1 to n do
  for j:=1 to n do
    begin write('a[',i,',',j,']=');
      readln(a^[i,j])
    end;
  writeln('vasha matriza');
   for i:=1 to n do
     begin
       for j:=1 to n do
     write(a^[i,j]:4);
     writeln
     end;
max:=1;
  for i:=1 to n do
    if a^[max,max]<a^[i,i]
      then max:=i;
        for i:=1 to n do
          begin
            at^:=a^[m,i];
            a^[m,i]:=a^[max,i];
            a^[max,i]:=at^
          end;
writeln('poluchennaya matriza');
 for i:=1 to n do
   begin
     for j:=1 to n do
     write(a^[i,j]:4);
     writeln;
   end;
readln;
end.

Последний раз редактировалось Serge_Bliznykov; 13.12.2012 в 16:13.
Lilen вне форума Ответить с цитированием
Старый 13.12.2012, 16:21   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, я не знаю, что за задачу Вы решаете (почему вводите K - а потом его нигде не используете, например,

но в этом кусочке кода:
Код:
  for i:=1 to n do
    if a^[max,max]<a^[i,i]
      then max:=i;
        for i:=1 to n do
          begin
            at^:=a^[m,i];
....
всё неверно. мало того, что цикл по i внутри цикла по i
так ещё и используете переменную m. А чему она равна? Правильно, хрен знает чему!

во-вторых, про переменную at
если уже Вы доводите ситуацию до абсурда и вместо целой переменной используете УКАЗАТЕЛЬ на целый тип, так тогда не забывайте выделять под этот указатель память (через new(at); )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.12.2012, 17:01   #13
Lilen
Пользователь
 
Регистрация: 04.10.2012
Сообщений: 20
По умолчанию

Задана квадратная матрица. Поменять местами строку с максимальным элементом на главной диагонали со строкой с заданным номером m. Решить задачу нужно с использованием динамических массивов.
запуталась с переменными, m-это номер строки, который вводится с клавиатуры, в последующем на главной диагонали ищется максимальный элемент и строка с максимальным элементом меняется со строкой номера m (введенного с клавиатуры)

спасибо, что указали на ошибки, теперь работает

Код:
 
program borlpasc;
const n=3;
type mas=array[1..100,1..100] of integer;
var a:^mas; at:^integer;
i,j,k,max,m:integer;
 begin
 //writeln('vvedite razmernost matrizbI');
 //readln(n);
 write('введите номер строки=');
 readln(m);

 NEW(a);  NEW(at);
 for i:=1 to n do
  for j:=1 to n do
    begin write('a[',i,',',j,']=');
      readln(a^[i,j])
    end;
  writeln('матрица:');
   for i:=1 to n do
     begin
       for j:=1 to n do
     write(a^[i,j]:4);
     writeln
     end;
max:=1;
  for i:=1 to n do
    if a^[max,max]<a^[i,i]
      then max:=i;
        for i:=1 to n do
          begin
            at^:=a^[m,i];
            a^[m,i]:=a^[max,i];
            a^[max,i]:=at^
          end;
writeln('полученная матрица');
 for i:=1 to n do
   begin
     for j:=1 to n do
     write(a^[i,j]:4);
     writeln;
   end;
readln;
end.
Lilen вне форума Ответить с цитированием
Старый 13.12.2012, 17:10   #14
Lilen
Пользователь
 
Регистрация: 04.10.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
всё неверно. мало того, что цикл по i внутри цикла по i
так ещё и используете переменную m. А чему она равна? Правильно, хрен знает чему!
цикл i по i идет так, чтобы максимальный элемент искался на главной диагонали, т.е. a[1,1] a[2,2] a[3,3] - главная диаганаль, разве нет так?
Lilen вне форума Ответить с цитированием
Старый 14.12.2012, 00:29   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да. меня ваше форматирование лесенкой сбило с толку. у Вас там два отдельных цикла.
Это абсолютно нормально.

Зрительно я не вижу ошибок (я бы только в конце программы добавил освобождение занятой памяти через Dispose(at); Dispose(a);

А так, вроде, всё должно работать нормально!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) _4Alex4_ Помощь студентам 1 14.11.2012 07:39
динамические структуры Saloma Паскаль, Turbo Pascal, PascalABC.NET 3 12.12.2011 00:01
Динамические структуры danilqa Паскаль, Turbo Pascal, PascalABC.NET 2 11.04.2011 12:16