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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 22:13   #1
BotoBot
 
Регистрация: 30.05.2009
Сообщений: 6
По умолчанию Функции/процедуры и их "подстраеваемость" в код

В общем, точной формулировки задания нет, но я попробую объяснить на примерах.

На руках имеем, к примеру, функцию:
(глоб. переменные: x,y,w[инт массив]:инт)
Код:
function EnterHand(a,b,c):integer;
var i:integer;
begin

for i:=1 to a*b do
 begin
 write(i,' from ',a*b,': ');
 read(c[i]);
 end;

end;
и чтобы это работало при вызове
Код:
EnterHand(x,y,w[а вот это одна из моих проблем])
смысл:
Как вы уже наверное догадались х,у ширина и высота матрица, а w это массив чисел. В данном примере (функции) в этот массив мы ручками вбиваем значения. Ну так вот, надо подстроить эту функцию(не забываем, что эта функция лишь пример) чтоб она работала например не с "х,у,w" а с "с,р,е" ну и тд
И нечто подобное надо на процедуре.
Не буду особо умничать, что я пробовал, а что нет, сразу доверюсь профессионалам.
BotoBot вне форума Ответить с цитированием
Старый 14.06.2009, 23:49   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Возможно так:
Код:
const
  COL_COUNT = 10;
  ROW_COUNT = 10;

type
  TArray = array[1..ROW_COUNT, 1..COL_COUNT] of Integer;

function EnterHand(h, w: Word; var m: TArray): integer;
var
  i, j: Word;
begin
  for i := 1 to h do
    for j := 1 to w do begin
      write(i*j,' from ', h*w, ': ');
      read(m[i, j]);
    end;
end;

var
  m: TArray;
  h, w: Word;

begin
  h := 5;
  w := 5;
  EnterHand(h, w, m);
end.
P.S. Формулируй вопрос точнее. Все таки должен быть одномерный массив или матрица?
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 15.06.2009, 01:52   #3
BotoBot
 
Регистрация: 30.05.2009
Сообщений: 6
По умолчанию

У меня вопрос не про конкретный случай, и об этом я писал, а если не писал, то намекал, а если не намекал то забыл....это раз. Т.е. я хотел разобраться для себя как сделать "чтото подобное". Ладно, приведу более подробны пример, с началом,срединой и концом...
Код:
program Test;
uses CRT;
type warray=array[0..1000] of integer;
var x1,y1,x2,y2:integer;
    w1,w2:warray;

function EnterHand(a,b,c{  !!!     Заметка 2     !!!   }:integer):integer;
var i:integer;
begin

for i:=1 to a*b do
 begin
 write(i,' from ',a*b,': ');
 read(c[i]); {Заметка 3 + Заметка 1}
 end;

end;

function HorizontallyMatrix(a,b,c{  !!!     Заметка 2     !!!   }:integer):integer;
var i:integer;
begin

for i:=1 to a*b do
 begin
 write(c[i]:4); {Заметка 3 + Заметка 1}
 if i mod a = 0 then writeln;
 end;

end;

{Это я пишу для себя, чтоб ярче видеть где кончается "одно" и начинается "другое"-----------------------------------------------------}


begin
read(x1);
read(y1);
read(x2);
read(y2);
EnterHand(x1,y1,w1[{Заметка 1}]);
EnterHand(x2,y2,w2[{Заметка  1}]);

{Между "всякими строчками" в нормальной версии естественно будут выводиться "writeln('бла-бла-бла')", ClrScr'ы и простые переходы строчек, но я опять напоминаю, что это не конкретная задача,  я лишь прошу разъянить мне пару вещей}

HorizontallyMatrix(x1,y1,w1[{Заметка  1}]);
HorizontallyMatrix(x2,y2,w2[{Заметка  1}]);


end.
Значит так, код пишу сразу в форум, так что не гарантирую его работоспособность(ошибки,орфография и тд), я им стараюсь передать основную мысль.
Теперь по поводу вопросов, там есть 3 заметки, из них некоторые повторяються несколько раз. Ну так вот:
Заметки 1: "Я явно недогоняю", какие индексы у массива w1,w2 ставить как при вызове функции, так и в самой функции(и там и там ругаеться)
Заметки 2: "Я явно недогоняю", какие индексы ставить в параметрах функции.
Заметки 3: А вот тут и с индексом и с переменной проблемы. Помимо того, как я уже и говорил, что не помню/не знаю кое какое свойство функции, которое отвечалобы за запись в массив глобальной переменной через параметр функции(это правее имени функции)(в данном случае я говорю про глобальные масивы w1,w2 и параметры функции "c")

Вродебы нормально описал. Если будут вопросы поясню ещё подробнее, хотя куда уж подробнее(?).... Я также ещё раз акцентирую внимание на то, что это лишь пример, и то, что код лишь примерный(т.е. писал я его сразу сюда, а это значит, что к каким либо арфографическим ошибкам кода придераться не стоит).

Дополнение.
Также дополню, что в коде крайне желателен одномерный массив.
"Формулируй вопрос точнее. Все таки должен быть одномерный массив или матрица?"
Про матрицу я там сказал "кслову", и вродебы я там это написал.
И кстати ваш код работает некорректно.


Пока Вы "все" там думаете, я тож попробую чёнить поколдовать. Кажись парочку ошибок у себя я уже нашёл( c: integer вместо c:warray например...это ток с виду, но я на 99% уверен что это ошибка), но исправлю я их чуть позже.

Последний раз редактировалось BotoBot; 15.06.2009 в 02:01. Причина: Дополнение
BotoBot вне форума Ответить с цитированием
Старый 15.06.2009, 09:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
BotoBot
Если тебе нужен общий вид работы с динмассивом в процедуре как с параметром то вот пример:

Код:
type da=array of integer;
  function EnterHand(a,b:integer; var c:array of integer):integer;
var i:integer;
begin

for i:=1 to high(c) do
 begin
 write(i,' from ',a*b,': ');
 read(c[i]);
 end;

end;
 var w:array of integer;   {$o-}
begin
 setlength(w,3);
 EnterHand(1,3,w);
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 11:14   #5
BotoBot
 
Регистрация: 30.05.2009
Сообщений: 6
По умолчанию

Дадада, это как раз то, что мне надо. Спасибо огромное, разобрался...и понял что я сильно тупанул..
Побольшебы таких примерчиков. Кстати не подскажете где есть подобная "справка" с общими видами работ и тд?
BotoBot вне форума Ответить с цитированием
Старый 16.06.2009, 12:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Кстати не подскажете где есть подобная "справка" с общими видами работ и тд?
Только в голове знающих
Надо просто читать литературу и представлять как описанные в ней методы применять комбинируя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 13:26   #7
BotoBot
 
Регистрация: 30.05.2009
Сообщений: 6
По умолчанию

Да какбы почитываю литературку по паскалю, да ток мою книжку явно не красят примеры, и как справочник её использовать очень трудно...Да и расписанно там что надо и не надо...читать немног лень....а такбы какойнить норм справочник купить, и подглядывать туда)
BotoBot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 задачи на паскале, нужен код. "горю на зачете" NIcque Помощь студентам 6 15.05.2009 05:59
"Разветляющие процессы" Прозьба проверить код! Dmitriy-e-nest Общие вопросы Delphi 3 15.01.2009 23:37
Программа "простые итерации". Готовый код. Проблема с компилированием. Oleg330 Общие вопросы C/C++ 9 25.12.2008 23:51
Очень нужна помощь по Turbo Pascal...Не могу составить програму,по теме:"Процедуры и файлы"...( Zara Помощь студентам 2 02.12.2008 18:23
Вопрос о "создании" процедуры Rusl92 Общие вопросы Delphi 5 20.08.2008 18:37