IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Модули, операции со строками и столбцами матрицы
сообщение
Сообщение #1


Гость






Добрые люди! Помогите, чем сможете...
У меня че-то не получается сделать так, чтобы прога заработала, то одна ошибка, то другая, особенно с типами данных, я уж не знаю че делать..
На всякий случай текст задачи:
Дана матрица R(4,3), состоящая из чисел типа WORD. Найти сумму элементов того столбца матрицы, где находится максимальный элемент, и разделить на максимальный элемент все элементы второй строки. Вывести полученную матрицу. Написать программу без функций и процедур. Оформить деление на максимальный элемент в виде процедуры, а нахождение суммы элементов столбца матрицы, в виде функции.
Может еще какие ошибки заприметите... Заранее спасибо..
Текст программы:
program Matrica;
uses crt,lll,ccc;
const m=4; n=3;
type
ind1=1..m; ind=1..n;
vect=array[ind] of word;
matr=array[ind1,ind] of word;
var
k,i,imax:ind1;
k1,j,jmax:ind;
msmax,a:word;
ms:matr;
begin
for i:=1 to k do
for j:=1 to k1 do
begin
write('введите элемент матрицы a[',i,',',j,']:');
readln(ms[i,j]);
end;
begin
imax:=4;
jmax:=3;
msmax:=ms[4,3];
for i:=1 to k do
for j:=1 to k1 do
if ms[i,j]>msmax then
begin msmax:=ms[i,j];
imax:=4;
jmax:=3;
end;
end;
sum(k1,msmax);
begin
clrscr;
writeln(sum(m,n,ms[jmax]):5:2); {еще вопрос: по какому принципу здесь
dl(m,2,msmax,ms); ставятся переменные, от которых зависит функция?}
end;
begin
for i:=1 to k do
begin
writeln;
for j:=1 to k1 do
write(ms[i,j]:8:2);
End;
End.


Модуль1
unit ccc;
interface
const n=3;
type
ind=1..n;
vect=array[ind] of word;
Function sum(k:ind; Line:vect):word;
implementation
Function sum;
var
j:ind;
S:word;
begin
S:=0;
For j:=1 To k do
S:=S+Line[j];
begin
End;
End;
end.


Модуль2

unit ccc;
interface
const n=3;
type
ind=1..n;
vect=array[ind] of word;
Function sum(k:ind; Line:vect):word;
implementation
Function sum;
var
j:ind;
S:word;
begin
S:=0;
For j:=1 To k do
S:=S+Line[j];
begin
End;
End;
end.

rolleyes.gif


Прикрепленные файлы
Прикрепленный файл  LAB6.PAS ( 689 байт ) Кол-во скачиваний: 257
Прикрепленный файл  LLL.PAS ( 287 байт ) Кол-во скачиваний: 275
Прикрепленный файл  CCC.PAS ( 239 байт ) Кол-во скачиваний: 265
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(-Мария- @ 16.05.05 12:27)
Написать программу без функций и процедур.

Цитата(-Мария- @ 16.05.05 12:27)
Оформить деление на максимальный элемент в виде процедуры, а нахождение суммы элементов столбца матрицы, в виде функции.

Противоречия не видите?

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

Еще одно:
clrscr;
writeln(sum(m,n,ms[jmax]):5:2); { <--- здесь }

... слишком много параметров - функция ждет 2, передаются 3...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(volvo @ 16.05.05 12:32)
Противоречия не видите?


Вот в этом-то и фишка, что функции и процедуры запихнуть надо в модули, а основной текст проги должен быть без них.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот что получилось у меня:


Прикрепленные файлы
Прикрепленный файл  matrix.rar ( 992 байт ) Кол-во скачиваний: 195
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Спасибо за выделенное мне время rolleyes.gif
вопрос: Можно ли получить инфо поподробнее по этой строчке?

ms[which, i] := ms[which, i] div max;

И еще почему Type в отдельном модуле, это по собственому желанию или так и надо?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Я на Сурсах вообще-то написал про это... rolleyes.gif
Дело в том, что Паскаль считает два типа, которые определены совершенно одинаково, но в разных модулях (или в модуле и основной программе, неважно) РАЗНЫМИ !!! Они же описаны в разных местах... И естественно, может возникнуть ошибка "несоответствие типов". Поэтому везде, где только можно желательно выносить определение типов в отдельный модуль и подключать его по мере необходимости...

Насчет
ms[which, i] := ms[which, i] div max;
...
Здесь есть небольшая проблемка. Во-первых, используется Div потому что результат должен быть целый, а оператор "/" дает вещественный результат.
А во вторых - можно обойтись совсем без этого, т.к. при целочисленном делении ЛЮБОГО элемента матрицы на ее максимальный элемент получится 0, итого можно просто заменять всю вторую строку нулями и не мучаться smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






у меня новая проблема:
1. ошибка "Не делится на 0", при чем по сути дела прога должна сначала запросить ввод элементов матрицы, чего не происходит
2.Что-то я не вникла в
Цитата
А во вторых - можно обойтись совсем без этого, т.к. при целочисленном делении ЛЮБОГО элемента матрицы на ее максимальный элемент получится 0, итого можно просто заменять всю вторую строку нулями и не мучаться
Я думала, что только при делении 0 на любое число получается 0, а 2-я строка не обязательно из нулей, может я какое-то свойство матрицы позабыла?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата(-Мария- @ 16.05.05 19:20)
1. ошибка "Не делится на 0", при чем по сути дела прога должна сначала запросить ввод элементов матрицы, чего не происходит

Я не знаю, что было в программе изменено, но моя версия отработала без нареканий...
Цитата(-Мария- @ 16.05.05 19:20)
Я думала, что только при делении 0 на любое число получается 0, а 2-я строка не обязательно из нулей, может я какое-то свойство матрицы позабыла?

Если я поделю НАЦЕЛО 5 на 12, сколько будет (целая часть)? Правильно, 0... То же самое происходит и там, при делении каждого элемента строки на максимум матрицы, т.е. на заведомо БОЛЬШЕЕ число. Частное ВСЕГДА будет равно 0...

А делить НЕнацело мне не дает ограничение
Цитата
Дана матрица R(4,3), состоящая из чисел типа WORD
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата(volvo @ 16.05.05 19:32)
Я не знаю, что было в программе изменено, но моя версия отработала без нареканий...



Я не изменяла в самой проге, пришлось поновой сохранить модули, чтобы основная прога их видела, а так он мне писал Unit file format error (про TPU)
к самому тексту я и не притрагивалась..
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Какие TPU? Я никакие TPU не присоединял... Это что-то с компилятором. Сам свои же TPU-шки не понимает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(volvo @ 16.05.05 19:50)
Какие TPU? Я никакие TPU не присоединял... Это что-то с компилятором. Сам свои же TPU-шки не понимает...

Ну дак,я сохранила еще в этом TPU все модули, т к компилятор требовал...
а ему мало этого, теперь с 0 проблемы
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 16:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name