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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 22:32   #1
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию Проблема с использованием подпрограмм в Pascal

Всем добрый вечер, осталась последняя задача из лабы. Никак не могу решить. Помогите пожалуйста.
Вот задача: Составить программу, содержащую подпрограмму для вычисления суммы положительных элементов первой строки матрицы С(10,20).
вот я попытался. для того чтобы удобней было проверять задал массив не 10*20 а 4*2. Препод заболел заместо нее, лекцию(а точнее жалкое ее подобие) провел некто, в течении получаса начал только излагать теорию и привел один пример, где к сожалению не было задания с массивами, после чего нас отпустили. Поэтому я долго рыскал по справочной литературе, в поисках как хотя бы задать массив внутри функции, в общем как смог написал:
Код:
program t;
var i,j,z:integer;s:real;
c:array[1..4,1..2] of real;
K:array[1..10] of real;
function Plus(k:array[1..10] of real):real;
begin
for i:=1 to 4 do
for j:=1 to 2 do
If c[i,j]>0 then k[z]:=c[i,j];end;
begin
For i:=1 to 4 do
for j:=1 to 2 do readln(c[i,j]);
s:=0; for z:=1 to 10 do s:=s+k[z];
writeln('s=',s:6:2);end.

Последний раз редактировалось Dimani4; 30.11.2010 в 22:36.
Dimani4 вне форума Ответить с цитированием
Старый 30.11.2010, 23:14   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

В функции в качестве формального параметра нельзя указать массив с размерами поэтому делай так
Код:
..................
type
    Massiv = array[1..2, 1..4] of real; 
var 
    i,j,z:integer;
    s:real;
    c: Massiv;
function Plus(k:Massiv):real;
var
    sum: real;
    i: byte;
begin
    sum := 0.0;
    i := 1;
    for j:=1 to 4 do
         If k[i,j]>0 then sum := sum + k[i,j];
    Plus := sum;
end.
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.12.2010, 09:00   #3
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

Hacker19_90 благодарю вас, но теперь вот такая проблема.
изначально я планировал что программа будет работать так: задается массив, она сканирует первую строчку, и все положительные значение отправляет во 2ой массив, потом все элементы 2ого массива складываются.
Вы мне предложили более простое и рациональное решение: задается один массив, сканируется его строка и сразу положительные значения добавляются("плюсуются") в какую-то переменную, поэтому убрав из программы 2ой массив и лишние переменные я получил следующе:
Код:
program t;
type
    Massiv = array[1..2, 1..4] of real;
var
    i,j:integer;                          {параметры двумерного массива}
    sum:real;                              {будущая сумма положительных значений}
    k: Massiv;                            {двумерный массив "K", где  2строки*4столбца}
function Plus1(k:Massiv):real;
var
    sum: real;
    i: byte;
begin
    sum := 0;           {зануление суммы}
    i := 1;              {i не меняется т.к нужна только 1ая строка}
    for j:=1 to 4 do     {перебираем по порядку элементый 1ой строки}
         If k[i,j]>0 then sum := sum + k[i,j];     {складываем эти элементы.}
end; 
begin
for i:=1 to 2 do
for j:=1 to 4 do readln(k[i,j]);  {вводим вручную элементы массива}
writeln('sum=',sum:4:2);          {выводим сумму, которая считалась в функции}
end.
вроде все логично, правильно, но в итоге пишется что сумма равна 0, подскажите в чем я о5 прокололся?

ps: пояснение написал специально чтобы вам было легче понять чего я тут пытаюсь "родить"

Последний раз редактировалось Dimani4; 01.12.2010 в 09:18.
Dimani4 вне форума Ответить с цитированием
Старый 01.12.2010, 09:56   #4
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Dimani4, у вас функция не возвращает результат выполнения в программу.
Код:
function Plus1:real;
var
    sum: real;
    i: byte;
begin
    sum := 0;           {зануление суммы}
    i := 1;              {i не меняется т.к нужна только 1ая строка}
    for j:=1 to 4 do     {перебираем по порядку элементый 1ой строки}
    If k[i,j]>0 then 
    Begin
       sum := sum + k[i,j];     {складываем эти элементы.}
    End;
   Plus1:=Sum {Присваиваем полученное значение функции}
end; 
Begin
  ....
  Writeln('Summa = ', Plus1:4:2)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 01.12.2010, 10:06   #5
Dimani4
Пользователь
 
Регистрация: 30.11.2010
Сообщений: 11
По умолчанию

GetMax
спасибо вам, выручили, все заработало
Dimani4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с использованием подпрограмм и макросов Freezy Помощь студентам 0 05.11.2010 15:16
Программа с использованием подпрограмм и макросов Freezy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 02.11.2010 22:42
Программирование с использованием подпрограмм. Александр181189 Паскаль, Turbo Pascal, PascalABC.NET 0 14.06.2010 17:13
Дан файл F.Написатьпрограмму с использованием подпрограмм. SEKTOR Помощь студентам 0 26.04.2010 20:56