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

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

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

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





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


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

procedure processing(var p,v,t: single; q:PMatr);
var
n,m,k,i,j,x,y: single;
begin
for k:=1 to y do
begin
p:q^[t]^[1];
for j:=1 to y do
while i<=x do
begin
if p=q^[i]^[j] then begin v:=v+1; i:=x;
i:=i+1;
end;
for j:=1 to y do
while i<=x do
begin
if n:=q^[i]^[j] then begin n:=q^[i]^[j]; m:=m+1; i:=x
i:=i+1;
end;
end;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
и там у меня есть какая то ошибка, либо там написан бред
Даже не зная описания PMatr - да, там написан бред. Уже потому, что индексироваться типом Single массив не может (нужен перечислимый тип), а тебе, видно, очень хочется:
Цитата
procedure processing(var p,v,t: single; q:PMatr);
{ ... }
p:q^[t]^[1]; { <--- А как же t: single ??? }
(далее по тексту - то же самое)

Цитата
Все это делается с помощью двухмерного массива.
Неправда. У тебя это делается с помощью структуры данных, которая имитирует динамический двумерный массив, скорее всего (еще раз - описания PMatr я не вижу, поэтому утверждать что-либо не могу).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Tint=integer;
Treal=real;
TrealFile= file of Treal;
Tmas=array [1..1] of TReal;
PMas=^Tmas;
TMatr=array [1..1] of PMas;
PMatr=^Tmatr;


что делать тогда, если там бред написан?

Сообщение отредактировано: imouto -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Tmas=array [1..1] of TReal;
> PMas=^Tmas;

Не лучший способ объявлять динмассив (я про 1..1). Где-то про это в ЧАВО написано...


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
что делать тогда, если там бред написан?
Переписать, чтоб не было бреда, наверное? Я по крайней мере другого способа не знаю.

Для начала - уточним задание: процедура получает на вход матрицу и номер строки. Она должна вернуть максимально часто встречающееся в одном столбце число из этой строки? То есть, если у меня матрица
1, 6, 3, 4, 5
6, 3, 4, 0, 9
6, 5, 1, 3, 5
3, 8, 6, 4, 2
, и номер строки = 1, то на выходе я должен получить "3"? (поскольку 3 встречается в четырех столбцах, первом, втором, третьем и четвертом, а больше ни одно число из первой строки в четырех и более столбцах не встречается) Я правильно понял задание?

Добавлено через 1 мин.
Цитата
Где-то про это в ЧАВО написано...

Как не надо писать программы, пункт 2 в этом посте...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Я все понимаю, что это не рационально, однако в универе стоит именно такая задача. им требуется не рациональность, а просто насилование мозга студентам.
Цитата
Я правильно понял задание?

Да, так.
Цитата
Переписать, чтоб не было бреда, наверное?

Если б я мог mega_chok.gif

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Для обычной статической матрицы решение может быть таким:
type
tmatrix = array[1 .. 4, 1 .. 5] of real;

procedure processing(numrow: integer; q:tmatrix; rows, cols: integer;
var number: real);

function Exists(row: integer; value: real): Boolean;
const
Eps = 0.0001; // Чтобы правильно сравнивать вещественные числа
var
i: Integer;
begin
Exists := True;
for i := 1 to rows do
if Abs(value - q[i, row]) < Eps then exit;
Exists := False;
end;

var
i, j, Cnt, maxCnt: integer;
maxVal: Real;
begin
maxCnt := 0;
for i := 1 to cols do
begin
Cnt := 0;
for j := 1 to cols do
if Exists(j, q[1, i]) then Inc(Cnt);

if Cnt > maxCnt then
begin
number := q[1, i]; maxCnt := Cnt;
end;
end;
end;

const
a: tmatrix = (
(1, 6, 3, 4, 5),
(6, 3, 4, 0, 9),
(6, 5, 1, 3, 5),
(3, 8, 6, 4, 2)
);

var value: real;
begin
processing(1, a, 4, 5, value);
writeln(value:0 :0);
end.

, для динамической - попробуй реализовать самостоятельно (только разберись в коде, а не просто копируй его). Что не получится - пиши, подскажем...

P.S. Всем супероптимизаторам: не надо супероптимизировать. Оптимизировать будете СВОЙ код у себя на машине для своих личных нужд. Чужой оставьте в покое. Это понятно? Ибо все ваши супероптимизации - пшик, в лучшем случае не вредящий, в худшем - замедляющий программу. Компилятор без вас разберется, что и как делать для конкретного процессора, указанного в настройках.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


В общем написал вот так. Но тут нужно процедуру сделать функцией, булевской. Ниче не могу придумать. Помогите плиз.

Код
type
Treal=real;
Tmas=array [1..1] of TReal;
PMas=^Tmas;
TMatr=array [1..1] of PMas;
PMatr=^Tmatr;

Procedure Zadanie(var mass1:PMatr;Realstr1,Realstl1,strin:integer);
var                    
  m,n,q,qm:integer;
  mm:TReal;
  b:boolean;
  i1,j1,k1:integer;
begin
  qm:=-5;
  b:=true;
  massmax:=mass1^[strin]^[1];
  for k1:=1 to realstr do
  begin
    q:=0;
    b:=false;
    for i1:=1 to Realstl1 do
    begin
      for j1:=1 to Realstr1 do
      begin
        if (mass1^[i1]^[j1]=mass1^[strin]^[k1]) and (b=false) then
        begin
          q:=q+1;
          mm:=mass1^[i1]^[j1];
          b:=true;
        end;
      end;
      b:=false;
      if(q>qm) then
      begin
           massmax:=mm;
           qm:=q;
      end;
    end;
  end;
end;


Сообщение отредактировано: imouto -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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