Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
micr0
0 / 0 / 0
Регистрация: 10.04.2010
Сообщений: 9
#1

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

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

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

Перебор Массива - Delphi
Есть массив вида const arr: array of string=('','',''); Во-первых, как его перебрать? Нужно сверить значение введенное пользователем и...

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

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

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

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

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

1
Mysterious Light
Эксперт по математике/физике
3872 / 1890 / 277
Регистрация: 19.07.2009
Сообщений: 2,903
Записей в блоге: 21
29.06.2011, 02:21 #2
А мне эта задача не кажется столь простой. Я сделал ввод-вывод через консоль, но это никак не влияет на процедуры.
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
Привет! Вот еще темы с ответами:

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

Перебор текста - Delphi
Здравствуйте уважаемые программисты. Помогите разобраться с задачей: Есть текст в мемо1, необходимо посчитать количество слов в которых...

перебор Memo - Delphi
у меня есть список я его подгружаю в делфи путем AssignFile(F, ''+Edit6.Text+'/1.txt'); Reset(F);

Перебор символов - Delphi
Можно ли это сделать проще: function strTextNext(strText,strSimvol:string):string; var s1,s2:string; i,d:longint; begin ...


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

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

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