Форум «Всё о Паскале» _ Задачи _ процедуры с параметрами
Автор: Анечка 24.03.2009 1:36
Есть программа, нужно прописать 3 процедуры, каждая с 3 параметрами. Первая процедура - изменение размерности матрицы, т.е. спрашивать пользователя сколько строк и сколько столбцов, изменение имени первой и второй матрицы; вторая - пользователь выбирает что делать с матрицей( находить среднее арифм, сумму или произведение элементов); третья - формула, по которой считается результатная матрица. Вот сама задача: Дана матрица А(6,6). Определить среднее арифметическое матрицы А - SRA. Создать новую матрицу В(6,6), где В(i,j)= A(i,j)*0,1*SRA.Вывести исходную и результатную матрицы на экран. 4progadfbdff.PAS ( 2.31 килобайт )
Кол-во скачиваний: 459
Автор: Lapp 24.03.2009 9:51
Цитата(Анечка @ 23.03.2009 21:36)
Есть программа, нужно прописать 3 процедуры, каждая с 3 параметрами.
А в чем, собственно, затруднение? Я не вполне понимаю, чего ты хочешь. Сделать это за тебя?.. А программа твоя или нет?
Автор: Анечка 24.03.2009 13:49
Цитата(Lapp @ 24.03.2009 5:51)
А в чем, собственно, затруднение? Я не вполне понимаю, чего ты хочешь. Сделать это за тебя?.. А программа твоя или нет?
Программа моя, писала сама, но как делать процедуры я не понимаю!(
Автор: Lapp 24.03.2009 16:53
Цитата(Анечка @ 24.03.2009 9:49)
Программа моя, писала сама, но как делать процедуры я не понимаю!(
Хорошо, поможем обязательно. Только нужно кое-что уточнить. Например - параметров у каждой процедуры должно быть ровно три? Это требование выглядит несколько странным.. Вообще, в данном случае разбиение на процедуры кажется мне надуманным - но это еще ладно, раз требуют, можно три сделать. Но насчет параметров - в высшей степени странно. Если уж с тебя требуют определенное число параметров, то пусть скажут, какие именно. Пожалуйста, уточни этот вопрос.
Так, из общих соображений целесообразности, я могу, например, предложить выделить в процедуру, например, печать заголовка. Это будет вполне осмысленно. Текст (шапку) при этом можно держать в отдельном файле. Если тебе это подходит, могу помочь.
Дальше.. Выбор дествия. которое нужно произвести с матрицей, можно оформить либо в виде меню, либо в виде парсера строки. Первое (меню) намного легче второго (парсера). Меню тоже можно выделить в отдельную (и даже не одну) процедуру.
Так что выбирай. Проясни детали, которые я спрашивал (например, у препа). Скажи, что именно ты хочешь сделать. А я постараюсь помочь.
Автор: Анечка 25.03.2009 0:29
Цитата(Lapp @ 24.03.2009 12:53)
Хорошо, поможем обязательно. Только нужно кое-что уточнить. Например - параметров у каждой процедуры должно быть ровно три? Это требование выглядит несколько странным.. Вообще, в данном случае разбиение на процедуры кажется мне надуманным - но это еще ладно, раз требуют, можно три сделать. Но насчет параметров - в высшей степени странно. Если уж с тебя требуют определенное число параметров, то пусть скажут, какие именно. Пожалуйста, уточни этот вопрос.
Так, из общих соображений целесообразности, я могу, например, предложить выделить в процедуру, например, печать заголовка. Это будет вполне осмысленно. Текст (шапку) при этом можно держать в отдельном файле. Если тебе это подходит, могу помочь.
Дальше.. Выбор дествия. которое нужно произвести с матрицей, можно оформить либо в виде меню, либо в виде парсера строки. Первое (меню) намного легче второго (парсера). Меню тоже можно выделить в отдельную (и даже не одну) процедуру.
Так что выбирай. Проясни детали, которые я спрашивал (например, у препа). Скажи, что именно ты хочешь сделать. А я постараюсь помочь.
Параметров не обязательно, но желательно три. Не, заголовок( как я поняла ты имеешь ввиду титульный лист) выделять в процедуру нельзя... надо запрашивать пользователя о размерности матрицы, через процедуры спросить в форме меню под 1,2,3 что делать с матрицей, далее через процедуру высчитать создать формулу на основе данной, спросить пользователя так же через меню как расположить исходный и результатный массив: рядом, друг под другом или по диагонали(тоже через процедуры сделать).Вот что мне препод сказал...
Автор: Lapp 25.03.2009 11:20
Цитата(Анечка @ 24.03.2009 20:29)
Параметров не обязательно, но желательно три.
Отлично. Желательность постараемся учесть по мере возможности (но не будем горевать, если ее не будет)))
Цитата(Анечка @ 24.03.2009 20:29)
заголовок( как я поняла ты имеешь ввиду титульный лист) выделять в процедуру нельзя...
Терпеть не могу слова "нельзя". Вот, смотри, я сделал процедуру для выводв строки, которая может центрировать строку, нормировать на левый/правый край, а также выводить в указанной позиции. Ты увидишь сама, насколько это удобнее - никаких явных указаний, где печатать, вычислений позиции.. Я, конечно, понимаю, что тебе может показаться жалко своей работы - но это именно то, что должен делать компьютер, ибо он делает это гораздо лучше людей .
program zadanie_4; uses crt; type tMatrix=array[1..6,1..6] of real;
procedure OutLn(s: string; Pos,Col: integer); begin TextColor(Col); case Pos of -2: GoToXY(1,WhereY); 0: GoToXY((Lo(WindMin)+Lo(WindMax)-Length(s))div 2,WhereY); -1: GoToXY(Lo(WindMin)+Lo(WindMax)-Length(s)+2,WhereY); else GoToXY(Pos,WhereY) end; WriteLn(s) end;
begin clrscr; GoToXY(1,6); OutLn('Вашему вниманию представленна программа',-1,LightGray); OutLn('по нахождению среднего арифметического',0,LightGray); OutLn('в квадратной матрице.',0,LightGray); WriteLn; OutLn('ЗАДАЧА ПРОГРАММЫ:',0,Red); OutLn('ПОСТРОИТЬ КВАДРАТНУЮ МАТРИЦУ "А"',0,White); OutLn('НАЙТИ СРЕДНЕЕ АРИФМЕТИЧЕСКОЕ В МАТРИЦЕ "А"',0,White); OutLn('ПОСТРОИТЬ МАТРИЦУ "Б"*0.1*SRA',0,Red); OutLn('ВЫВЕСТИ ИСХОДНУЮ МАТРИЦУ И ПОЛУЧЕННУЮ РЯДОМ',0,Red); WriteLn; OutLn('Программу составила',42,Green); OutLn('студентка МГУ ПС группы ЭИЭ - 112',42,Green); OutLn('ИВАНОВА АННА',42,Green); WriteLn; WriteLn; OutLn('Москва 1.12.2009',0,Yellow); WriteLn; OutLn('Нажмите любую клавишу для продолжения!',0,LightGray); ch:=readkey;
L1: begin clrscr; writeln('ВВЕДИТЕ ЭЛЕМЕНТЫ МАТРИЦЫ!!!'); writeln; SRA:=0; for i:=1 to 6 do for j:=1 to 6 do begin repeat write('a[',i,',',j,']>'); readln(byk); val(byk,a[i,j],z); textcolor(12); If z<>0 then writeln('Неверно задан элемент матрицы! Повторите ввод элемента'); textcolor(white); Until z=0;
SRA:=SRA+a[i,j]; end; SRA:=SRA/36; for i:=1 to 6 do for j:=1 to 6 do b[i,j]:=a[i,j]*0.1*SRA; clrscr; writeln('Среднее арифметическое =',sra:10:2); writeln; writeln(' "МАТРИЦА А"'); writeln; for i:=1 to 6 do begin for j:=1 to 6 do write(a[i,j]:10 :1); writeln; { writeln;} end; writeln; writeln(' "МАТРИЦА Б"'); writeln; for i:=1 to 6 do
begin for j:=1 to 6 do write(b[i,j]:10 :1); writeln; end;
gotoxy(20,24); writeln('Хотите ли продолжить? Y-да, N-нет'); l2: case readkey of #89: goto l1; #121: goto l1; #78: exit; #110:exit; end; goto l2; end; end.
Остальную часть программы я пока оставил без изменения. Это было непросто - скрепя зубы я оставил твои метки и GoTo.. Если хочешь, чтоб я и дальше помогал тебе - избавься от них (я могу помочь ).
Цитата(Анечка @ 24.03.2009 20:29)
надо запрашивать пользователя о размерности матрицы, через процедуры спросить
У меня сложилось впечатление, что ты как-то извращенно понимаешь процедуры.. Они у тебя почему-то всегд для ввода чего-нибудь. Это в корне неверное понимание. Процедура (или функция) используется для обособленной (и, как правило, неоднократно использующейся) части кода, выполняющей любую задачу - совсем не только ввод. Даже, как правило не ввод ).
Цитата(Анечка @ 24.03.2009 20:29)
в форме меню под 1,2,3
Опять магическое число 3!.. Боюсь, я буду просыпаться по ночам и кричать: "Три параметра!!" (почти по Пушкину )
Цитата(Анечка @ 24.03.2009 20:29)
далее через процедуру высчитать создать формулу на основе данной,
А это я просто не понял)). "Через процедуру высчитать.. создать формулу на основе данной..." ?? Что это значит?? Кто понял, объясните, плз..
Цитата(Анечка @ 24.03.2009 20:29)
Вот что мне препод сказал...
Ох.. Одно из двух: либо вы с ним плохо поняли друг друга, либо - мне жаль МГУ, с такими преподами у него нет шансов..
Автор: Анечка 26.03.2009 1:35
Цитата(Lapp @ 25.03.2009 7:20)
Отлично. Желательность постараемся учесть по мере возможности (но не будем горевать, если ее не будет)))
Терпеть не могу слова "нельзя". Вот, смотри, я сделал процедуру для выводв строки, которая может центрировать строку, нормировать на левый/правый край, а также выводить в указанной позиции. Ты увидишь сама, насколько это удобнее - никаких явных указаний, где печатать, вычислений позиции.. Я, конечно, понимаю, что тебе может показаться жалко своей работы - но это именно то, что должен делать компьютер, ибо он делает это гораздо лучше людей .
program zadanie_4; uses crt; type tMatrix=array[1..6,1..6] of real;
procedure OutLn(s: string; Pos,Col: integer); begin TextColor(Col); case Pos of -2: GoToXY(1,WhereY); 0: GoToXY((Lo(WindMin)+Lo(WindMax)-Length(s))div 2,WhereY); -1: GoToXY(Lo(WindMin)+Lo(WindMax)-Length(s)+2,WhereY); else GoToXY(Pos,WhereY) end; WriteLn(s) end; begin clrscr; GoToXY(1,6); OutLn('Вашему вниманию представленна программа',-1,LightGray); OutLn('по нахождению среднего арифметического',0,LightGray); OutLn('в квадратной матрице.',0,LightGray); WriteLn; OutLn('ЗАДАЧА ПРОГРАММЫ:',0,Red); OutLn('ПОСТРОИТЬ КВАДРАТНУЮ МАТРИЦУ "А"',0,White); OutLn('НАЙТИ СРЕДНЕЕ АРИФМЕТИЧЕСКОЕ В МАТРИЦЕ "А"',0,White); OutLn('ПОСТРОИТЬ МАТРИЦУ "Б"*0.1*SRA',0,Red); OutLn('ВЫВЕСТИ ИСХОДНУЮ МАТРИЦУ И ПОЛУЧЕННУЮ РЯДОМ',0,Red); WriteLn; OutLn('Программу составила',42,Green); OutLn('студентка МГУ ПС группы ЭИЭ - 112',42,Green); OutLn('ИВАНОВА АННА',42,Green); WriteLn; WriteLn; OutLn('Москва 1.12.2009',0,Yellow); WriteLn; OutLn('Нажмите любую клавишу для продолжения!',0,LightGray); ch:=readkey;
L1: begin clrscr; writeln('ВВЕДИТЕ ЭЛЕМЕНТЫ МАТРИЦЫ!!!'); writeln; SRA:=0; for i:=1 to 6 do for j:=1 to 6 do begin repeat write('a[',i,',',j,']>'); readln(byk); val(byk,a[i,j],z); textcolor(12); If z<>0 then writeln('Неверно задан элемент матрицы! Повторите ввод элемента'); textcolor(white); Until z=0;
SRA:=SRA+a[i,j]; end; SRA:=SRA/36; for i:=1 to 6 do for j:=1 to 6 do b[i,j]:=a[i,j]*0.1*SRA; clrscr; writeln('Среднее арифметическое =',sra:10:2); writeln; writeln(' "МАТРИЦА А"'); writeln; for i:=1 to 6 do begin for j:=1 to 6 do write(a[i,j]1); writeln; { writeln;} end; writeln; writeln(' "МАТРИЦА Б"'); writeln; for i:=1 to 6 do
begin for j:=1 to 6 do write(b[i,j]1); writeln; end;
gotoxy(20,24); writeln('Хотите ли продолжить? Y-да, N-нет'); l2: case readkey of #89: goto l1; #121: goto l1; #78: exit; #110:exit; end; goto l2; end; end.
Остальную часть программы я пока оставил без изменения. Это было непросто - скрепя зубы я оставил твои метки и GoTo.. Если хочешь, чтоб я и дальше помогал тебе - избавься от них (я могу помочь ).
У меня сложилось впечатление, что ты как-то извращенно понимаешь процедуры.. Они у тебя почему-то всегд для ввода чего-нибудь. Это в корне неверное понимание. Процедура (или функция) используется для обособленной (и, как правило, неоднократно использующейся) части кода, выполняющей любую задачу - совсем не только ввод. Даже, как правило не ввод ).
Опять магическое число 3!.. Боюсь, я буду просыпаться по ночам и кричать: "Три параметра!!" (почти по Пушкину )
А это я просто не понял)). "Через процедуру высчитать.. создать формулу на основе данной..." ?? Что это значит?? Кто понял, объясните, плз.. Ох.. Одно из двух: либо вы с ним плохо поняли друг друга, либо - мне жаль МГУ, с такими преподами у него нет шансов..
программу посмотрела, впринципе интересно, но я боюсь, что препод этого не оценит(( на счет Go to...если поможешь, то я буду только рада ))) ммм...про процедуры поняла, но просто на моём примере они должны быть видны пользователь, т.е. на экран обязательно должно выводиться меню выбора дальнейших действий! Процедуры я сказала примерно, препод сказал типо сама думай...так что если у тя будут ещё какие то варианты - то я опять же за!)но они обязательно должны отоброжаться в работе программы, т.е. при работе пользователя с программой...вот...а препод у нас действительно не совсем вминяемый..ну а куда деваться?!если не получить автомат,сдавши 4 программы за семестр, то хрен сдашь экзамен, а он берёт по 200 евро...а откуда ж у бедного студента такие деньги?)) Так, что то меня на лирику потянуло)))Вообщем, жду ответа!;)
Автор: Lapp 26.03.2009 20:27
Цитата(Анечка @ 25.03.2009 21:35)
программу посмотрела, впринципе интересно, но я боюсь, что препод этого не оценит((
Ты не бойся, ты пробуй.
Цитата(Анечка @ 25.03.2009 21:35)
на счет Go to...если поможешь, то я буду только рада
Это несложно. Вот твоя прога без меток и GoTo. Наслаждайся.
program zadanie_4; uses crt; type tMatrix=array[1..6,1..6] of real;
procedure OutLn(s: string; Pos,Col: integer); begin TextColor(Col); case Pos of -2: GoToXY(1,WhereY); 0: GoToXY((Lo(WindMin)+Lo(WindMax)-Length(s))div 2,WhereY); -1: GoToXY(Lo(WindMin)+Lo(WindMax)-Length(s)+2,WhereY); else GoToXY(Pos,WhereY) end; WriteLn(s) end;
procedure DoIt; begin clrscr; writeln('ВВЕДИТЕ ЭЛЕМЕНТЫ МАТРИЦЫ:'); writeln; SRA:=0; for i:=1 to 6 do for j:=1 to 6 do begin repeat write('a[',i,',',j,']>'); readln(byk); val(byk,a[i,j],z); textcolor(12); If z<>0 then writeln('Неверно задан элемент матрицы! Повторите ввод элемента'); textcolor(white); Until z=0; SRA:=SRA+a[i,j]; end; SRA:=SRA/36; for i:=1 to 6 do for j:=1 to 6 do b[i,j]:=a[i,j]*0.1*SRA; clrscr; writeln('Среднее арифметическое =',sra:10:2); writeln; writeln(' "МАТРИЦА А"'); writeln; for i:=1 to 6 do begin for j:=1 to 6 do write(a[i,j]:10 :1); writeln; { writeln;} end; writeln; writeln(' "МАТРИЦА Б"'); writeln; for i:=1 to 6 do begin for j:=1 to 6 do write(b[i,j]:10 :1); writeln; end end;
begin clrscr; GoToXY(1,6); OutLn('Вашему вниманию представленна программа',0,LightGray); OutLn('по нахождению среднего арифметического',0,LightGray); OutLn('в квадратной матрице.',0,LightGray); WriteLn; OutLn('ЗАДАЧА ПРОГРАММЫ:',0,Red); OutLn('ПОСТРОИТЬ КВАДРАТНУЮ МАТРИЦУ "А"',0,White); OutLn('НАЙТИ СРЕДНЕЕ АРИФМЕТИЧЕСКОЕ В МАТРИЦЕ "А"',0,White); OutLn('ПОСТРОИТЬ МАТРИЦУ "Б"*0.1*SRA',0,Red); OutLn('ВЫВЕСТИ ИСХОДНУЮ МАТРИЦУ И ПОЛУЧЕННУЮ РЯДОМ',0,Red); WriteLn; OutLn('Программу составила',42,Green); OutLn('студентка МГУ ПС группы ЭИЭ - 112',42,Green); OutLn('ИВАНОВА АННА',42,Green); WriteLn; WriteLn; OutLn('Москва 1.12.2009',0,Yellow); WriteLn; OutLn('Нажмите любую клавишу для продолжения!',0,LightGray); ch:=readkey; repeat gotoxy(20,24); writeln('Хотите ли продолжить? Y-да, N-нет'); case readkey of #89,#121: DoIt; #78,#110: exit; end until false end.
Цитата(Анечка @ 25.03.2009 21:35)
ммм...про процедуры поняла, но просто на моём примере они должны быть видны пользователь, т.е. на экран обязательно должно выводиться меню выбора дальнейших действий! Процедуры я сказала примерно, препод сказал типо сама думай...так что если у тя будут ещё какие то варианты - то я опять же за!)но они обязательно должны отоброжаться в работе программы, т.е. при работе пользователя с программой...
У меня боооооольшие сомнения, что ты поняла, что такое процедуры и зачем они нужны. Я вот сделал процедуру DoIt сейчас (вообще без параметров, кстати), чтобы избавиться от GoTo - и это действительно достойная цель. Твои слова о том, чтобы пользователь видел работу процедуры вызывают откровенное недоумение. Типа как если бы пассажир автомобиля потребовал бы увидеть работу поршня двигателя. Нет и не может быть ему до этого дела. Организация программы целиком определяется программистом и никто ее не должен знать. Прошу тебя, перечитай раздел в учебнике про процедуры..
Цитата(Анечка @ 25.03.2009 21:35)
вот...а препод у нас действительно не совсем вминяемый..ну а куда деваться?!если не получить автомат,сдавши 4 программы за семестр, то хрен сдашь экзамен, а он берёт по 200 евро...а откуда ж у бедного студента такие деньги?))
Знаешь, эту информацию оставь для прокурора..
Еще замечу, что у тебя плоховато с форматированием программы. Я подправил в последнем варианте - обрати внимание, как нужно. Это важно.
Добавлено через 7 мин. PS При ответе, пожалуйста, не копируй весь предыдущий мессадж. Оставляй только то, что тебе нужно.