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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2014, 14:51   #1
SSarox
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 13
Стрелка Исправить ошибок в коде данной программе.

Я просто не понимаю что тут не правильно, объясните где находиться ошибка.
(конкретно укажите место).

Код:
program qq;
uses crt;
var
a:array[1..255,1..255] of integer;
Tab:array[1..255,1..255] of integer;
i,j,n,m:integer;
str:integer;
c:char;
procedure vvodstroki(var n:integer);
begin
repeat
write('введите n строк:');
readln(n);
if n=0 then writeln ('n и m не равны нулю повторите ввод заново');
until (n<>0)and(n>0);
end;
procedure vvodstolbcov (var m:integer);
begin
repeat
write('введите m столбцов:');
readln(m);
if m=0 then writeln ('n и m не равны нулю повторите ввод заново');
until (m<>0)and(m>0);
end;


procedure prog1 (a:array[1..255,1..255] of integer;
Tab:array[1..255,1..255] of integer;
i,j,n,m:integer;
c:char;
str:integer);
begin
Clrscr;
write ('1 матрица');
writeln;
randomize;
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=5-random(15);
write(a[i,j]:6);
WriteLn('возвести в куб (1) или квадрат(2)?');
ReadLn(str);
case str of
1:begin
if a[i,j]<0 then tab[i,j]:=(a[i,j])*(a[i,j])*(a[i,j]);
end;
2:begin
if a[i,j]<0 then tab[i,j]:=sqr(a[i,j]);
end;
end;
writeln;
write ('2 матрица');
writeln;
for i:=1 to n do
begin
for j:=1 to m do
begin
if tab[i,j]<>0 then
write(tab[i,j]:6) else write('*':6)
end;
writeln;
end;
begin
Window(2,2,80,80);
Gotoxy (40,23);
WriteLn ('любая кнопка для продолжения');
c:=readkey;
Clrscr;
vvodstroki (n);
vvodstolbcov (m);
prog1 (n,m,str,a[i,j],tab[i,j]);
end;
end.


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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.04.2014 в 15:20.
SSarox вне форума Ответить с цитированием
Старый 02.04.2014, 14:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А как должно быть правильно?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2014, 15:24   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если Вы про вот это:
error_tp.jpg
то это означает, что нельзя организовать такие большие структуры (DOS программа не позволяет выделять под статические переменные больше 64 кб


ваша структура имеет размер 255*255*2 байта = 130050 байт

Последний раз редактировалось Serge_Bliznykov; 02.04.2014 в 15:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2014, 16:44   #4
SSarox
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 13
По умолчанию

Бей.jpgПосле компиляции выдает вот это

Последний раз редактировалось SSarox; 02.04.2014 в 16:50.
SSarox вне форума Ответить с цитированием
Старый 03.04.2014, 09:40   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, про то, что у Вас PascalABC надо сразу говорить. это раз.

второе.
ошибка у Вас в том, что Вы написали БРЕД.
Вы в процедуре Prog1 (кстати, Вы знаете, что означает описание параметеров процедуры?? я выделил параметры процедуры цветом )
Цитата:
Код:
procedure prog1(a: array[1..255, 1..255] of integer;
  Tab: array[1..255, 1..255] of integer;
  i, j, n, m: integer;
  c: char;
  str: integer);
внутри процедуры вызываете её саму (в принципе рекурсивный вызов - так в принципе можно делать, если понимаешь, что такое рекурсия и зачем она нужна в данном случае!):
Цитата:
Код:
prog1(n, m, str, a[i, j], tab[i, j]);
а теперь сравните параметры, которые вы описали и то, что Вы передаёте, когда вызываете Prog1
Совпадают (тип и количество) ?! Нет?! (легко подсчитать, что описали Вы 8 параметров, а при вызове указываете 5) Тогда исправляйте.
И, кстати, вам же по русски написано в ошибке, в чём она заключается.

Я, например, вообще не понимаю, что Вы своим кодом пытаетесь добиться, поэтому и исправить не могу.


p.s. дальше ещё хуже - тела главной программы у Вас НЕТ!

Последний раз редактировалось Serge_Bliznykov; 03.04.2014 в 09:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2014, 21:48   #6
SSarox
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 13
По умолчанию

Программа делает вот что,Создать таблицу из 6 строк ТАВ, где в каждой строке будут располагаться найденные отрицательные(1) элементы из строк матрицы А, возведенные в квадрат(2).Вывести А и под ней ТАВ.

как она выглядит в более понятной форме

Код:
program qq;
uses crt;
var
a:array[1..255,1..255] of integer;
Tab:array[1..255,1..255] of integer;
i,j,n,m:integer;
c:char;
f:boolean;
procedure vvodstroki(var n:integer);
begin
  repeat
      write('Введите n строк:');
      readln(n);
                if  n=0 then writeln ('n и m не равны нулю, повторите ввод заново');
   until (n<>0)and(n>0);
end;
procedure vvodstolbcov (var m:integer);
 begin
          repeat
            write('Введите m столбцов:');
            readln(m);
            if  m=0 then writeln ('n и m не равны нулю, повторите ввод заново');
   until (m<>0)and(m>0);
 end;
begin
Window(2,2,80,80);
TextAttr:=14;
ClrScr;
WriteLn ('Нажмите любую клавишу для продолжения');
c:=readkey;
Clrscr;
vvodstroki (n);
vvodstolbcov (m);
Clrscr;
write ('1 матрица');
 writeln;
  randomize;
  for i:=1 to n do
  begin
    for j:=1 to m do
    begin
      a[i,j]:=5-random(15);
      write(a[i,j]:6);
      if a[i,j]<0 then tab[i,j]:=sqr(a[i,j]);
    end;
    writeln;
  end;
  writeln;
     write ('2 матрица');
   writeln;
  for i:=1 to n do
  begin
    for j:=1 to m do
    begin
      if tab[i,j]<>0 then
      write(tab[i,j]:6) else write('*':6)
    end;
    writeln;
end;
end.
Прошу помочь мне с процедурами, так как мой препод по программированию клал свой болт на образование нашей группы, просто потому, что он взяточник

вот процедуры
(1) Проц.(положительные)
(2) Проц.(куб)
(3) Проц.(вывести дополнительный массив из отрицательных(положительных) чисел состоящие в матрице А.)

Неужели никто не может помочь?

Последний раз редактировалось Stilet; 05.04.2014 в 17:58.
SSarox вне форума Ответить с цитированием
Старый 05.04.2014, 18:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program qq;
uses crt;
Type
 TArray=array[1..255,1..255] of integer;
var
a,Tab:TArray;
i,j,n,m:integer;
c:char;
f:boolean;

//(1) Проц.(положительные)
procedure a1(var q,w:TArray);
var i,j:integer;
begin
 for i:=Low(q) to high(q) do begin
  for j:=Low(q[i]) to high(q[i]) do begin
   w[i,j]:=0;
   if q[i,j]>0 then w[i,j]:=q[i,j];
  end;
 end;

 for i:=Low(q) to high(q) do begin
  for j:=Low(q[i]) to high(q[i]) do begin
   if w[i,j]<>0 then write(w[i,j]:5);
  end; writeln;
 end;

end;

//(2) Проц.(куб)
procedure a2(var q,w:TArray);
var i,j:integer;
begin
 for i:=Low(q) to high(q) do begin
  for j:=Low(q[i]) to high(q[i]) do begin
   w[i,j]:=q[i,j]*q[i,j]*q[i,j];  write(w[i,j]:5);
  end;writeln;
 end;
end;

...

begin
...
Тут вводим матрицу
...
a1(a,Tab);
a2(a,Tab);
...
end.
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.04.2014, 19:36   #8
SSarox
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 13
По умолчанию

Большое Спасибо)

Последний раз редактировалось SSarox; 05.04.2014 в 20:02.
SSarox вне форума Ответить с цитированием
Старый 05.04.2014, 20:01   #9
SSarox
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 13
По умолчанию

Почему при компиляции проги вместе с процедурами пишет "отсутствует основной BEGIN".
SSarox вне форума Ответить с цитированием
Старый 05.04.2014, 21:32   #10
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от SSarox Посмотреть сообщение
Почему при компиляции проги вместе с процедурами пишет "отсутствует основной BEGIN".
Проверьте количество begin, end и их соответствие друг другу.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибки в данной программе. SSarox Помощь студентам 1 02.04.2014 13:35
исправление ошибок в коде Глеб1991 Фриланс 3 26.03.2013 13:01
Ошибка 26..как её ипсправить в данной программе Klik_1602 Помощь студентам 2 24.02.2011 21:53
исправление ошибок в коде Viola2208 Помощь студентам 0 12.05.2010 00:01