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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2009, 16:22   #1
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию Pascal. Функциии и процедуры

Есть задание, я написал к нему программу, но без использования функций, а нужно с их использованием. Я просто не пойму к чему здесь можно привязать эту функцию, здесь вроде бы совсем мало действий, из-за функции программа наоборот увеличится в размерах. Да и в функциях я не силен.

В общем задание:
Задан массив M[i,j] i,j=1,10, найти сумму элементов главной диагонали. (с использованем функций или процедур)

Вот его реализация без функции:

Код:
program kur6;
uses crt;
var p:array[1..10,1..10] of real; s1:real; i,j:integer;
begin
     clrscr;
     s1:=0;
     writeln('vvedite elementy matricy');
     for i:=1 to 10 do
     for j:=1 to 10 do
         readln(p[i,j]);
         for i:=1 to 10 do
         for j:=1 to 10 do
         begin
         if (i=j) then
            s1:=s1+p[i,j];
         end;
         writeln('summa elementov glavnoi diagonali',s1:2:2);
         readln;
end.
Помогите, пожалуйста, иначе я не могу разобраться в функциях, не понимаю, как правильно описывать переменные. Если поможете, то я сам уже сделаю еще одно подобное задание, всего их у меня в курсовой 2 подобных(с функциями)
cudalover вне форума Ответить с цитированием
Старый 25.04.2009, 16:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Массив заполняю случайными.
Код:
uses crt;
type arr = array[1..10,1..10] of real;
var
p : arr;
s : real;

procedure init(var m : arr; n : integer);
var i,j : integer;
begin
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  m[i,j] := random(20);
  write(m[i,j]:5:1);
  end;
 writeln;
 end;
writeln;
end;

function sum(m : arr; n : integer) : real;
var i : integer;
begin
sum := 0;
for i:=1 to n do
 sum := sum + m[i,i];
end;

begin
clrscr;
randomize;
init(p,10);
s := sum(p,10);
writeln('Summ = ',s:5:2);

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 16:39   #3
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

С помошью функций и процедур можно так наизвращаться
вот например организуем чтение процедурой и подсчёт эл-в глвной диагонли функцией:
Код:
const n = 10;
type
  matr = array[1..n,1..n] of real;

procedure ReadMatr(var m:matr);
var i, j: integer;
begin
writeln('Vvedite matricu razmerom ',n,'*',n);
for i:= 1 to n do
  for j:= 1 to n do
    begin
    write('Element m[',i,',',j,']=');
    readln(m[i,j])
    end;
end;

function Sum_Gl(p: matr):real;
var i:integer; TempSum:real;
begin
TempSum:=0;
for i:= 1 to n do
   TempSum:=TempSum+p[i,i];

Sum_Gl:=TempSum;
end;

var p: matr;
begin
ReadMatr(p);
writeln('summa elementov glavnoi diagonali',Sum_Gl(p):5:2);
readln;
end.
HoLToFF вне форума Ответить с цитированием
Старый 25.04.2009, 16:43   #4
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Массив заполняю случайными.
Код:
function sum(m : arr; n : integer) : real;
var i : integer;
begin
sum := 0;
for i:=1 to n do
 sum := sum + m[i,i];
end;
рекурсия будет лишней, я думаю
HoLToFF вне форума Ответить с цитированием
Старый 25.04.2009, 16:49   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
рекурсия будет лишней, я думаю
Мм.. А где вы тут рекурсию видите? )
sum - результат. Обычный цикл
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 16:50   #6
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

У вас получается что вызывается функция sum опять, по крайней мере мой делфи 7 говорит что не хватает параметров для вызова, не знаю на счёт паскаля, наверно в плане паскаля я ошибаюсь
HoLToFF вне форума Ответить с цитированием
Старый 25.04.2009, 16:51   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

HoLToFF
В Делфи вместо sum нужно писать Result )

функция аналогична этой
Код:
function sum(m : arr; n : integer) : real;
var i : integer;
rez : real;
begin
rez := 0;
for i:=1 to n do
 rez := rez + m[i,i];
sum := rez;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 16:53   #8
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

Знаете, и паскаль
Код:
 sum := sum {от тут от}+ m[i,i];
потребовал скобку и параметр
или я совсем ничего не понимаю
HoLToFF вне форума Ответить с цитированием
Старый 25.04.2009, 16:53   #9
Troi666
Пользователь
 
Регистрация: 01.12.2008
Сообщений: 58
По умолчанию

HoLToFF имени функции мы присваиваем возвращаемое значение...тут это и происходит...сначала присваиваем 0, затем предыдущее значение + значение текущего элемента главной диагонали
Troi666 вне форума Ответить с цитированием
Старый 25.04.2009, 16:55   #10
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[PASCAL] записи с вариантами + процедуры die_hard Помощь студентам 4 22.04.2009 16:43
Pascal-процедуры и функции xxBOBAHxx Помощь студентам 3 18.11.2008 14:30
условие в функциии OnButton Ceprey Общие вопросы C/C++ 5 21.03.2008 14:42
Процедуры (Pascal) [Smarik] Помощь студентам 6 16.01.2008 14:52