Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
micr0
0 / 0 / 0
Регистрация: 10.04.2010
Сообщений: 9
1

Перебор массива.

29.06.2011, 00:13. Просмотров 1636. Ответов 1

Дан одномерный массив. Размерность задаётся с клавы. Нужно вывести последовательность чисел, сумма которых будет простым числом. Сделать нужно очень срочно - прошу помочь кого не затруднит.
В теории должны быть в программе 3 цикла как я себе представляю, переменная-флажок ну и сам вывод последовательности. На практике трудно даётся, очень( Форму сделал, начало - а дальше никак. Сказали задачка минут на 15-30)) Если есть кто добрый то помогите пожалуйста - в ближайшие два дня нужна задача а то препод съест.
Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 00:13
Ответы с готовыми решениями:

Перебор Массива
Есть массив вида const arr: array of string=('','',''); Во-первых, как его...

Полный перебор и сокращенный перебор, путем исключения одного цикла
1) Разработать на основе метода полного перебора программу razmen1 для решения...

Как сделать перебор элементов массива?
Здравствуйте, Попробую как можно понятнее объяснить мой вопрос. Пользователей...

Перебор
помогите пожалуйста На плоскости заданы своими целочисленными координатами N...

Перебор
n = количество элементов в ряде (3<=n<=100) m = количество значений...

1
Mysterious Light
Эксперт по математике/физике
3968 / 1939 / 391
Регистрация: 19.07.2009
Сообщений: 2,969
Записей в блоге: 21
29.06.2011, 02:21 2
Лучший ответ Сообщение было отмечено micr0 как решение

Решение

А мне эта задача не кажется столь простой. Я сделал ввод-вывод через консоль, но это никак не влияет на процедуры.
Delphi
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
program Project2;
 
{$APPTYPE CONSOLE}
 
//без комментариев
function isPrime(const x: word): boolean;
var a,h: word;
begin
     if x = 2 then Result:=true else
     if x mod 2 = 0
        then Result:=false
        else begin
             a:=1; h:=trunc(sqrt(x)) div 2; Result:=True;
             while (a<=h) and Result
             do begin
                if x mod (2*a+1) = 0
                   then Result:=false;
                inc(a);
             end;
        end;
end;
                          
const max=10;
type ta = array[1..max] of byte; //тип массива
type TAddResult = procedure(b:ta;size:byte);  
{ это тип процедуры вывода на экран массива b }
 
{ собственно, начало основной функции, смысл аргументов очевиден }
procedure FindAllSeq(AddResult: TAddResult; a: ta; n: byte);
 
var b: ta; p: byte; part_sum:word;
{ b хранит рассматриваемую в настоящий момент последовательность, p — её длина }
{ part_sum — сумма элементов этой посл. }
 
{ процедуры добавление новой точки в текущую последовательность и исключение 
  я вынес просто для удобства }
procedure AddPoint(value:byte);
begin
    inc(p);
    b[p]:=value;
    part_sum:=part_sum+value;
end;
 
procedure ExcludePoint;
begin
    part_sum:=part_sum-b[p];
    dec(p);
end;
 
{ рекурсивная процедура, которая генерит точку (поочередно) от startpoint до n+1
  и рассматривает последовательность с этой точкой
  Кратко говоря, это стандартный каркас для перебора всех подпоследовательностей }
procedure FindSeq(const startpoint: byte);
var k:byte;
begin
     if startpoint=n+1
        then if isPrime(part_sum)
                then AddResult(b,p)
                else begin end
        else begin
             AddPoint(a[startpoint]);
             // n+1 означает случай, когда startpoint последняя точка в подпосл.
             for k:=startpoint+1 to n+1 do
                 FindSeq(k);
             ExcludePoint;
        end
end;
 
{ сбственно, само тело процедуры FindAllSeq }
var i: byte;
begin
     p:=0; part_sum:=0;
     for i:=1 to n do // это первая точка, одна из n
         FindSeq(i);
end;
 
 
 
var a: ta; n,i: byte;
{ это вывод для консоли, без труда можно переписать
  под оконный вывод, например, в ListBox }
procedure ShowResult(b:ta;size:byte);
var i: integer;
begin
    for i:=1 to size do
        write(b[i],' ');
    writeln;
end;
 
begin
readln(n);
for i:=1 to n do read(a[i]); readln; // чтение, очевидно )
FindAllSeq(@ShowResult,a,n); // !!! usage !!!
readln;
end.
P.S. чего-то мне кажется, что я не ту задачу решал. На всякий раз скажу, что код делает: он ищет все подпоследовательности введенной пользователем последовательности целых чисел, сумма элементов которых есть простое число.
Например, a=[2,3,5,6], n=4:
2 3 6
2 3
2 5 6
2 5
2
3
5 6
5
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2011, 02:21

Перебор букв
Мне нужно сделать такой алгоритм чтобы делал такое условие Дана формачка с...

Перебор IP адресов
Всем привет, подскажите как сгенерировать список IP адресов к примеру от...

Перебор символов
Можно ли это сделать проще: function...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru