Есть программа, нужно прописать 3 процедуры, каждая с 3 параметрами. Первая процедура - изменение размерности матрицы, т.е. спрашивать пользователя сколько строк и сколько столбцов, изменение имени первой и второй матрицы; вторая - пользователь выбирает что делать с матрицей( находить среднее арифм, сумму или произведение элементов); третья - формула, по которой считается результатная матрица. Вот сама задача: Дана матрица А(6,6). Определить среднее арифметическое матрицы А - SRA. Создать новую матрицу В(6,6), где В(i,j)= A(i,j)*0,1*SRA.Вывести исходную и результатную матрицы на экран. Нажмите для просмотра прикрепленного файла
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;
var
a,b: tMatrix;
i,j,z: integer;
byk: string [5] ;
SRA,s,x: real;
ch:char;
label
L1,L2;
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))div2,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:=1to6dofor j:=1to6dobeginrepeat
write('a[',i,',',j,']>');
readln(byk);
val(byk,a[i,j],z);
textcolor(12);
If z<>0then
writeln('Неверно задан элемент матрицы! Повторите ввод элемента');
textcolor(white);
Until z=0;
SRA:=SRA+a[i,j];
end;
SRA:=SRA/36;
for i:=1to6dofor j:=1to6do
b[i,j]:=a[i,j]*0.1*SRA;
clrscr;
writeln('Среднее арифметическое =',sra:10:2);
writeln;
writeln(' "МАТРИЦА А"');
writeln;
for i:=1to6dobeginfor j:=1to6do
write(a[i,j]:10 :1);
writeln;
{ writeln;}end;
writeln;
writeln(' "МАТРИЦА Б"');
writeln;
for i:=1to6dobeginfor j:=1to6do 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;
var
a,b: tMatrix;
i,j,z: integer;
byk: string [5] ;
SRA,s,x: real;
ch:char;
label
L1,L2;
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))div2,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:=1to6dofor j:=1to6dobeginrepeat
write('a[',i,',',j,']>');
readln(byk);
val(byk,a[i,j],z);
textcolor(12);
If z<>0then
writeln('Неверно задан элемент матрицы! Повторите ввод элемента');
textcolor(white);
Until z=0;
SRA:=SRA+a[i,j];
end;
SRA:=SRA/36;
for i:=1to6dofor j:=1to6do
b[i,j]:=a[i,j]*0.1*SRA;
clrscr;
writeln('Среднее арифметическое =',sra:10:2);
writeln;
writeln(' "МАТРИЦА А"');
writeln;
for i:=1to6dobeginfor j:=1to6do
write(a[i,j]
1);
writeln;
{ writeln;}end;
writeln;
writeln(' "МАТРИЦА Б"');
writeln;
for i:=1to6dobeginfor j:=1to6do 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;
var
a,b: tMatrix;
i,j,z: integer;
byk: string [5] ;
SRA,s,x: real;
ch:char;
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))div2,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:=1to6dofor j:=1to6dobeginrepeat
write('a[',i,',',j,']>');
readln(byk);
val(byk,a[i,j],z);
textcolor(12);
If z<>0then writeln('Неверно задан элемент матрицы! Повторите ввод элемента');
textcolor(white);
Until z=0;
SRA:=SRA+a[i,j];
end;
SRA:=SRA/36;
for i:=1to6dofor j:=1to6do b[i,j]:=a[i,j]*0.1*SRA;
clrscr;
writeln('Среднее арифметическое =',sra:10:2);
writeln;
writeln(' "МАТРИЦА А"');
writeln;
for i:=1to6dobeginfor j:=1to6do write(a[i,j]:10 :1);
writeln;
{ writeln;}end;
writeln;
writeln(' "МАТРИЦА Б"');
writeln;
for i:=1to6dobeginfor j:=1to6do write(b[i,j]:10 :1);
writeln;
endend;
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;
enduntil false
end.
Цитата(Анечка @ 25.03.2009 21:35)
ммм...про процедуры поняла, но просто на моём примере они должны быть видны пользователь, т.е. на экран обязательно должно выводиться меню выбора дальнейших действий! Процедуры я сказала примерно, препод сказал типо сама думай...так что если у тя будут ещё какие то варианты - то я опять же за!)но они обязательно должны отоброжаться в работе программы, т.е. при работе пользователя с программой...
У меня боооооольшие сомнения, что ты поняла, что такое процедуры и зачем они нужны. Я вот сделал процедуру DoIt сейчас (вообще без параметров, кстати), чтобы избавиться от GoTo - и это действительно достойная цель. Твои слова о том, чтобы пользователь видел работу процедуры вызывают откровенное недоумение. Типа как если бы пассажир автомобиля потребовал бы увидеть работу поршня двигателя. Нет и не может быть ему до этого дела. Организация программы целиком определяется программистом и никто ее не должен знать. Прошу тебя, перечитай раздел в учебнике про процедуры..
Цитата(Анечка @ 25.03.2009 21:35)
вот...а препод у нас действительно не совсем вминяемый..ну а куда деваться?!если не получить автомат,сдавши 4 программы за семестр, то хрен сдашь экзамен, а он берёт по 200 евро...а откуда ж у бедного студента такие деньги?))
Знаешь, эту информацию оставь для прокурора..
Еще замечу, что у тебя плоховато с форматированием программы. Я подправил в последнем варианте - обрати внимание, как нужно. Это важно.
Добавлено через 7 мин. PS При ответе, пожалуйста, не копируй весь предыдущий мессадж. Оставляй только то, что тебе нужно.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.