Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9

Найти и вывести максимальное простое число из заданного массива

10.11.2015, 18:35. Показов 4882. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить задачу.
Дан произвольный массив целых чисел размером 5 на 7. Найти и вывести максимальное простое число из этого массива. Для каждой строки отдельно найти количество элементов первая цифра которых четна.

Добавлено через 7 минут
Пробовал, не получается, вот скажет кто скажет где не правильно.

Найти и вывести максимальное простое число из этого массива.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
VAR
A:ARRAY[1..2,1..3] OF INTEGER;
I,J,MAX,K,E:INTEGER;
BEGIN
FOR I:=1 TO 2 DO
FOR J:=1 TO 3 DO
READ(A[I,J]);
E:=0;
FOR K:=1 TO A[I,J] DO
IF (A[I,J] MOD K=0) THEN
E:=E+1;
IF (E=2) THEN MAX:=A[I,J];
FOR I:=1 TO 2 DO BEGIN
FOR J:=1 TO 3 DO
FOR K:=1 TO A[I,J] DO
IF (A[I,J] MOD K=0) THEN E:=E+1;
IF (E=2) AND (A[I,J]>MAX) THEN MAX:=A[I,J];
END;
WRITE(MAX);
END.
Для каждой строки отдельно найти количество элементов первая цифра которых четна.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
VAR
A:ARRAY [1..2,1..3] of Integer;
M,K,C,W:Integer;
Begin
For M:=1 to 2 do
For K:=1 to 3 do
Read(A[M,K]);
C:=0;
For M:=1 to 2 do
For K:=1 to 3 do
While A[M,K]<>0 do Begin
W:=A[M,K] mod 10;
A[M,K]:=A[M,K] div 10;
end;
If (W mod 2=0) then C:=C+1;
Writeln(C);
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2015, 18:35
Ответы с готовыми решениями:

Найти максимальное простое число в массиве
Всем привет. Подскажите ка можно найти MAX простое (от 4 до 10 значное) число в массиве. Массив заполняется рандомно, поиск МАХ знаю ка...

Найти максимальное простое число в массиве
Найти максимальное простое число в массиве. Найти минимальный полный квадрат среди положительных чисел в массиве?

Найти максимальное простое число в массиве
Найти максимальное простое число в массиве. Если таких нет, вывести соответствующее сообщение (использовать класс array)

13
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 18:56
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Отсутствие форматирования помогает приумножать ошибки.
Вот отформатированная (но не исправленная) 1 программа
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var
  A: array[1..2, 1..3] of integer;
  I, J, MAX, K, E: integer;
begin
  for I := 1 to 2 do
    for J := 1 to 3 do
      Read(A[I, J]);
  E := 0;
  for K := 1 to A[I, J] do
    if (A[I, J] mod K = 0) then
      E := E + 1;
  if (E = 2) then
    MAX := A[I, J];
  for I := 1 to 2 do
  begin
    for J := 1 to 3 do
      for K := 1 to A[I, J] do
        if (A[I, J] mod K = 0) then
          E := E + 1;
    if (E = 2) and (A[I, J] > MAX) then
      MAX := A[I, J];
  end;
  Write(MAX);
end.
Бросаетса в глаза цикл в 9 строке до А[i,j], когда i j уже не определены.

Добавлено через 2 минуты
Нет инициализации MAX.

Перед использованием Е в цикле (строка 18) требуется инициализация.
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
10.11.2015, 20:24  [ТС]
Павел, что значит инициализация?
Можно с Вами связаться не через форум? У меня двое детей и я не могу им задачку решить помочь, а надо.

"Бросаетса в глаза цикл в 9 строке до А[i,j], когда i j уже не определены."
Вот это мы хотя бы исправили?


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var
  A: array[1..2, 1..3] of integer;
  I, J, MAX, K, E: integer;
 
begin
  for I := 1 to 2 do
    for J := 1 to 3 do
      Read(A[I, J]);
  E := 0;
  for I := 1 to 2 do
    for J := 1 to 3 do
      for K := 1 to A[I, J] do
        if (A[I, J] mod K = 0) then
          E := E + 1;
  if (E = 2) then
    MAX := A[I, J];
  for I := 1 to 2 do
  begin
    for J := 1 to 3 do
      for K := 1 to A[I, J] do
        if (A[I, J] mod K = 0) then
          E := E + 1;
    if (E = 2) and (A[I, J] > MAX) then
      MAX := A[I, J];
  end;
  Write(MAX);
end.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 20:58
Инициализация - присвоение переменной какого-то начальное значения до начала выполнения алгоритма.

Вы мечетесь по клавиатуре. Сядьте, на бумаге опишите алгоритм (на словах по пунктам или блок-схему). Потом его реализуйте. Ведь по большому счёту программа уже готова. Там остались какие-то мусорные строки от предыдущих попыток, отсутствие инициализации.

Вот, например, MAX. Чему будет равно его значение к первому сравнению в цикле?
Pascal
1
if (E = 2) and (A[I, J] > MAX) then
Теперь посмотрите на Е в том же цикле. Мысленно представьте, что обработали A[1,1] и просматриваете A[1,2], а в E остался "мусор" от исследования A[1,1].

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

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

Добавлено через 3 минуты
Ещё. Есть небольшая разница между Read и ReadLn. На данном этапе обучения применяйте ReadLn.
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
10.11.2015, 21:16  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var
  A: array[1..2, 1..3] of integer;
  I, J, MAX, K, E: integer;
 
begin
  for I := 1 to 2 do
    for J := 1 to 3 do
      Readln(A[I, J]);
  E := 0;
  for K := 1 to A[I, J] do
    if (A[I, J] mod K = 0) then      
      E := E + 1;
  if (E = 2) then begin
    MAX := A[I, J];
    E := 0;
  end;
  for I := 1 to 2 do
  begin
    for J := 1 to 3 do
      for K := 1 to A[I, J] do
        if (A[I, J] mod K = 0) then
          E := E + 1;
    if (E = 2) and (A[I, J] > MAX) then
      MAX := A[I, J];
  end;
  Write(MAX);
end.
Добавлено через 8 минут
Павел у меня выводит 0

Добавлено через 1 минуту
что не так?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 21:29
Алгоритм:
1. В двух вложенных циклах по переменным I и J вводим двумерный массив A[I,J].
2. Принимаем максимальное простое число в массиве равным 0 (присваиваем переменной MAX нулевое значение). Если в конце программы оно останется нулевым, то в массиве нет и не было простых чисел.
3. Просматриваем все элементы двумерного массива A (в двух вложенных циклах по переменным I и J).
3.1. Для каждого элемента массива A - (A[I,J]) находим количество делителей E.
3.2. Если количество делителей равно 2 (число A[I,J] - простое) и это число превышает предыдущее максимальное число, то запоминаем новое максимальное простое число в переменной MAX.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program test;
 
var
  A: array[1..2, 1..3] of integer;
  I, J, MAX, K, E: integer;
 
begin
  for I := 1 to 2 do
    for J := 1 to 3 do
      readln(A[I, J]);
  MAX := 0;
  for I := 1 to 2 do
    for J := 1 to 3 do
    begin
      E := 0;
      for K := 1 to A[I, J] do
        if (A[I, J] mod K = 0) then
          E := E + 1;
      if (E = 2) and (A[I, J] > MAX) then
        MAX := A[I, J];
    end;
  writeln(MAX);
end.
Как видете - это ваша программа.

Добавлено через 7 минут
Мне не знакома среда PascalABC, но в ней должен быть реализован пошаговый отладчик с просмотром текущих значений переменных. Этот инструмент хорошо описан для TurboPascal (Как пользоваться отладчиком). Что-то похожее должно быть и в ABC.

Освойте - не пожалеете.
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
10.11.2015, 22:43  [ТС]
Павел спасибо огромное, разбираем все вместе с детьми. Про отладчик почитаю.

Добавлено через 25 минут
Павел пока Вы еще в сети еще один вопрос по задаче.
Pascal
1
MAX := 0;
мы не использовали 0 так как при всех отрицательных числах (они же могут быть в массиве) выводит 0, а не число из массива. Если есть простое положительное число, то оно естественно больше 0 и перезаписывает МАКС. что сделать можно, если заменить на MAX := A[I, J], то выводит максимальное число только, если оно последнее в массиве.
как сделать, что бы выводило и отрицательные числа?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 23:04
Лучший ответ Сообщение было отмечено luntikim как решение

Решение

Простое число (определение).

Если хотите использовать и отрицательные, то они не могут быть простыми по определению простых чисел (см. по ссылке).
Но если переформулировать задачу, как поиск в массиве максимального числа, модуль которого является простым числом, то введите переменную temp:=abs(A[I,J]), и именно для temp считайте количество делителей. Всё остальное - без изменений.

Тут я просто в растерянности - решать-то нужно поставленную задачу. Изменение условий - разве только для разминки.

Добавлено через 5 минут
Нет, ещё добавить строку
Pascal
1
2
      if (E = 2) and (MAX = 0) then
        MAX := A[I, J];
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
10.11.2015, 23:04  [ТС]
Павел дети объяснили, что простое число может быть отрицательное, сори
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 23:09
Могли перепутать - не само отрицательное, а его модуль.

Добавлено через 1 минуту
Иначе у числа -7 - четыре делителя -7, -1, 1, 7.

Добавлено через 1 минуту
Теория простых чисел появилась за несколько тысячелетий до введения термина "отрицательное число".
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
10.11.2015, 23:13  [ТС]
Даже я сейчас поняла

Добавлено через 3 минуты
а у числа -1
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
10.11.2015, 23:20
По науке, у модуля числа (-1) есть только один делитель - единица. Т.е. даже модуль (-1) не является простым числом.
1
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 9
11.11.2015, 01:21  [ТС]
Павел, если можно посмотрите вторую задачу.


Переделали, вроде считает, но учитель сказал, что это частный способ и это не правильно, а как тогда еще?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var
  A: ARRAY [1..2, 1..3] of Integer;
  M, K, C, D, W: Integer;
 
begin
  for M := 1 to 2 do
    for K := 1 to 3 do
      Read(A[M, K]);
  C := 0;
  D := 0;
  for M := 1 to 1 do
    for K := 1 to 3 do
    begin
      while A[M, K] <> 0 do
      begin
        W := A[M, K] mod 10;
        A[M, K] := A[M, K] div 10;
      end;
      if (W mod 2 = 0) then C := C + 1;
    end;
  
  for M := 2 to 2 do
    for K := 1 to 3 do
    begin
      while A[M, K] <> 0 do
      begin
        W := A[M, K] mod 10;
        A[M, K] := A[M, K] div 10;
      end;
      if (W mod 2 = 0) then D := D + 1;
    end;
  Writeln(C, ' ', D);
end.
Добавлено через 45 минут
Нашли другое решение, есть более короткое?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  A: ARRAY [1..2, 1..3] of Integer;
  M, K, C, W: Integer;
 
begin
  for M := 1 to 2 do
    for K := 1 to 3 do
      Read(A[M, K]);
  for M := 1 to 2 do
  begin
    C := 0;
    for K := 1 to 3 do
    begin
      while A[M, K] <> 0 do
      begin
        W := A[M, K] mod 10;
        A[M, K] := A[M, K] div 10;
      end;
      if (W mod 2 = 0) then C := C + 1;
    end;
    Writeln(C);
  end;
end.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
12.11.2015, 00:28
Sorry, вчера было уже поздно.
Да, по поводу 1-го варианта учитель прав - для каждой строки матрицы свой собственный код по поиску того же - нерациональненько.
Второй вариант - правильный. Можно лишь выпендриться знанием стандартной функции odd - заменить
Pascal
1
if (W mod 2 = 0)
на
Pascal
1
if not odd(W)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2015, 00:28
Помогаю со студенческими работами здесь

Дано целое число N (> 1). Если оно простое, то вывести сообщение: «Число N простое», иначе вывести сумму делителей
1) Дано целое число N (&gt; 1). Если оно простое, то вывести сообщение: «Число N простое», иначе вывести сумму делителей.*

Найти максимальное простое число в двумерном массиве
Задание: найти максимальное простое число в двумерном массиве и строку(и), состоящую(ие) полностью из простых чисел. Проблем...

Даны натуральные числа n и a(1), a(2), ... a(n) .. Найти максимальное простое число
Даны натуральные числа n и a(1), a(2), ... a(n) .. Найти максимальное простое число. Я понимаю- что моя просьба банальна, но всё же-...

Функция: для заданного числа А вывести предшествующее ему простое число
Для заданного числа А вывести на экран предшествующее по отношению к нему простое число. Столкнулся с проблемкой, при вводе 1,...

Вводится последовательность из N целых чисел. Найти максимальное простое число в последовательности
Прошу помочь с этой задачкой. Всю ночь просидел, так толком ничего и не вышло. Вводится последовательность из N целых чисел. Найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru