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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 06:42   #1
Вегуд
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию Найти номер столбца

Pascal

С помощью функции надо найти номер столбца с наибольшей суммой простых чисел.
Собственно, есть, так сказать, бета-версия программы.
Код:
type
  matr=array[1..100,1..100] of integer;
function prost(a:matr;m,n:integer):integer;
var
  i,j,k,s,kol,imax,max:integer;
  begin
    imax:=1;
    max:=low(integer);
    for i:=1 to n do
      begin
        s:=0;
        for j:=1 to m do
          begin
            kol:=0;
            for k:=1 to a[j,i] do
              if a[i,j] mod 2=0 then
                inc(kol);
            if kol=2 then
              s:=s+a[i,j];
          end;
        if s>max then
          begin
            max:=s;
            imax:=i;
          end;
      end;
  end;
var
  a:matr;
  i,j,m,n,max:integer;
begin
  writeln('Введите количество строк');
  readln(m);
  writeln('Введите количество столбцов');
  readln(n);
  writeln('Введите элементы');
  for i:=1 to m do
    for j:=1 to n do
      read(a[i,j]);
  writeln (' ');
  for i:=1 to m do
    begin
      for j:=1 to n do
        write(a[i,j],' ');
        writeln;
    end;
  readln;
  readln;
  if max>0 then
    writeln(prost)
  else
    writeln ('Простых чисел нет');
  readln;
end.
Не могу до конца понять, как и где нужно описывать переменные функции, чтобы всё адекватно работало. Нужен ли где-либо var перед этими переменными?

Последний раз редактировалось Вегуд; 12.12.2010 в 07:48.
Вегуд вне форума Ответить с цитированием
Старый 12.12.2010, 09:10   #2
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Внимательно посмотри свой код, у тебя
1) Функция prost ничего не возвращает:
2) В функцию ничего не передаеться, а описываешь ты ее как prost(a:matr;m,n:integer);
3) Сама функция ищет не правильно простые числа,
Код:
            for k:=1 to a[j,i] do
              if a[i,j] mod 2=0 then
                inc(kol);
            if kol=2 then
              s:=s+a[i,j];
4) Ты вызываешь функцию если почему то, какой то max>0, а должна?
Код:
  if max>0 then
    writeln(prost)
  else
    writeln ('Простых чисел нет');
Исправьте эти ошибки и будем тогда смотреть дальше!
Ybn2 вне форума Ответить с цитированием
Старый 12.12.2010, 13:29   #3
Вегуд
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию

Ну я вот и спрашиваю, как расставить переменные (в том числе то место, в котором функция что-либо возвращает), чтобы всё было правильно. Читал книжку, но до конца всё же не понял, как и что делается.
А разве сама часть программы, которая ищет номер столбца с наибольшей суммой простых чисел неправильна? Вроде сама по себе, без функции, правильно работает.

Последний раз редактировалось Вегуд; 12.12.2010 в 13:34.
Вегуд вне форума Ответить с цитированием
Старый 12.12.2010, 14:15   #4
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Цитата:
Сообщение от Вегуд Посмотреть сообщение
А разве сама часть программы, которая ищет номер столбца с наибольшей суммой простых чисел неправильна? Вроде сама по себе, без функции, правильно работает.
Я конечно не тестировал, но
Код:
  for k:=1 to a[j,i] do
              if a[i,j] mod 2=0 then
                inc(kol);
считает четные числа, а вот если бы было (даже не считает, тут k нигде не действует и kol всегда будет равен 0 или k в зависимости от четности a[i,j])
Код:
   for k:=1 to a[j,i] do
              if a[i,j] mod k=0 then
                inc(kol);
тогда простые, при условии что kol=2; (т.е делиться без остатка на 1 и на само себя).

Последний раз редактировалось Ybn2; 12.12.2010 в 14:18.
Ybn2 вне форума Ответить с цитированием
Старый 12.12.2010, 14:23   #5
Вегуд
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию

Хм. Да, действительно. Моя большая оплошность. Хотя даже почему-то первоначально работало. Спасибо.
А можете, пожалуйста, всё-таки объяснить, как быть с переменными?
Вегуд вне форума Ответить с цитированием
Старый 12.12.2010, 14:31   #6
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

С переменными все вроде OK. Только по структуре паскаль,
Код:
var
  a:matr;
  i,j,m,n,max:integer;
должен стоять перед функцией (это же глобальные переменные)
Ybn2 вне форума Ответить с цитированием
Старый 12.12.2010, 14:38   #7
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Короче, мне сейчас некогда объяснять, я накидаю как приблизительно должно быть, а Вы тестируйте и недочеты уберем.
Код:
type
  matr=array[1..100,1..100] of integer;
var
  i,j,m,n,max:integer;
  a:Matr;
function prost(a:matr;m,n:integer):integer;
var
  i,j,k,s,kol,max:integer;
  begin
    max:=low(integer);
    for i:=1 to n do
      begin
        s:=0;
        for j:=1 to m do
          begin
            kol:=0;
            for k:=1 to a[j,i] do
              if a[i,j] mod k=0 then
                inc(kol);
            if kol=2 then
              s:=s+a[i,j];
          end;
        if s<max then
          begin
            max:=s;
            prost:=i;
          end;
      end;
  end;
begin
  writeln('Введите количество строк');
  readln(m);
  writeln('Введите количество столбцов');
  readln(n);
  writeln('Введите элементы');
  for i:=1 to m do
    for j:=1 to n do
      read(a[i,j]);
  writeln (' ');
  for i:=1 to m do
    begin
      for j:=1 to n do
        write(a[i,j],' ');
        writeln;
    end;
  readln;
  max:=prost (a,n,m)
  if max>0 then
    writeln(max)
  else
    writeln ('Простых чисел нет');
  readln;
end.
Ybn2 вне форума Ответить с цитированием
Старый 12.12.2010, 14:49   #8
Вегуд
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию

Если вводить, например, 3, 14, 5, 20 при
Код:
if s<max then
то выдаёт, что простых чисел нет.
А если заменить на
Код:
if s>max then
то всё правильно вроде бы.
Вегуд вне форума Ответить с цитированием
Старый 12.12.2010, 14:56   #9
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Да,я тут ошибся, пробуй, тестируй, убирай баги.
Ybn2 вне форума Ответить с цитированием
Старый 12.12.2010, 22:18   #10
Вегуд
 
Регистрация: 09.12.2010
Сообщений: 8
По умолчанию

Хм. Когда нет простых чисел, то не выдаёт нужное сообщение. Вот уже минут 20 сижу, не могу понять, где ошибка
Вегуд вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив,номер столбца с максимальным количеством четных элементов nondeadlollipop Помощь студентам 4 01.11.2010 07:32
Как найти номер последного непустого строка? Simbad Microsoft Office Excel 2 16.01.2010 21:56
Получить номер столбца motorway Microsoft Office Excel 2 16.07.2009 21:39
В массиве G(6;8) определить номер столбца с наименьшим количеством нулей. Катюня Помощь студентам 2 21.01.2009 06:26