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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 12:47   #1
megaskull
 
Регистрация: 16.03.2013
Сообщений: 3
По умолчанию Как осуществить поиск и исправление повторов в массиве delphi.

Здравствуйте, не могу сообразить как осуществить поиск и исправление повторов в массиве. Задача такова: На экран выводится список студентов(16 человек) и рядом со списком, после нажатия кнопки выдается рандомное число из массива от 1 до 30, числа не должны повторяться. С выводом чисел я разобрался, но иногда попадаются повторы, нужно от них избавится и заменить на другое число.
Вот код который я написал:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    BitBtn1: TBitBtn;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Button1: TButton;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  k: integer;
  mass:array [1..30] of integer;

implementation

{$R *.dfm}


procedure TForm1.BitBtn1Click(Sender: TObject); \\кнопка вывода чисел
begin
Randomize();


for k:=1 to 16 do
 begin
 mass[k]:=1+random(30);
 end;
 k:=2;
 Label17.Caption:=IntToStr(mass[k-1]);
 Label18.Caption:=IntToStr(mass[k]);
 Label19.Caption:=IntToStr(mass[k+1]);
 Label20.Caption:=IntToStr(mass[k+2]);
 Label21.Caption:=IntToStr(mass[k+3]);
 Label22.Caption:=IntToStr(mass[k+4]);
 Label23.Caption:=IntToStr(mass[k+5]);
 Label24.Caption:=IntToStr(mass[k+6]);
 Label25.Caption:=IntToStr(mass[k+7]);
 Label26.Caption:=IntToStr(mass[k+8]);
 Label27.Caption:=IntToStr(mass[k+9]);
 Label28.Caption:=IntToStr(mass[k+10]);
 Label29.Caption:=IntToStr(mass[k+11]);
 Label30.Caption:=IntToStr(mass[k+12]);
 Label31.Caption:=IntToStr(mass[k+13]);
 Label32.Caption:=IntToStr(mass[k+14]);

for k:=1 to 16 do
 begin
 if mass[k]=mass[k+1]
   then mass[k]:=1+random(30);
 end;


end;

end.
Вот такие пироги.
megaskull вне форума Ответить с цитированием
Старый 16.03.2013, 13:28   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Нужно изначально создать массив заполненный по порядку, а потом его перемешать
http://yandex.ru/yandsearch?text=%D0...+delphi&lr=197
Sibedir вне форума Ответить с цитированием
Старый 16.03.2013, 16:14   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

вот вопрос, зачем столько меток? И вас не устроило бы заполнение меток в цикле? И кстати, если оператор 1, то после цикла или условия можно begin..end не ставить. И еще, я могу вам сделать с помощью вывода в МЕМО, а не в метку

выводит в компонент Tmemo 16 чисел в диапазоне от 0 до 30 и без повторения, если помог, то весы слева...
Вложения
Тип файла: rar рандом без повтора.rar (164.5 Кб, 12 просмотров)
from dark to light)

Последний раз редактировалось Stilet; 16.03.2013 в 17:28.
Алексей_2012 вне форума Ответить с цитированием
Старый 16.03.2013, 19:00   #4
megaskull
 
Регистрация: 16.03.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Нужно изначально создать массив заполненный по порядку, а потом его перемешать
http://yandex.ru/yandsearch?text=%D0...+delphi&lr=197
Этот способ я так и не понял...
Цитата:
вот вопрос, зачем столько меток? И вас не устроило бы заполнение меток в цикле? И кстати, если оператор 1, то после цикла или условия можно begin..end не ставить. И еще, я могу вам сделать с помощью вывода в МЕМО, а не в метку

выводит в компонент Tmemo 16 чисел в диапазоне от 0 до 30 и без повторения, если помог, то весы слева...
Вы очень помогли, доделал вашу программу и теперь все как нужно. По поводу меток, я только начинаю учить дельфи и поэтому про memo еще не знал даже близко Отдельное спасибо за знакомство с этим компонентом
megaskull вне форума Ответить с цитированием
Старый 16.03.2013, 19:07   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

да не за что, могу вам помогать изучать другие компоненты (лучше не мемо, а ричедит), на весы жать не обязательно...
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как осуществить поиск и закрытие порта Jleksern Общие вопросы Delphi 3 05.12.2011 05:52
Как осуществить поиск в диапазон? Simbad Microsoft Office Word 4 25.03.2010 12:09
Количество повторов значения ячейки в массиве A2B Microsoft Office Excel 8 23.02.2010 13:25
access 07 + delphi как подключать базы и осуществить поиск в них? frizz Microsoft Office Access 5 30.11.2009 07:10
как осуществить поиск в компоненте WebBrowser1 в delphi 7 SonClan Работа с сетью в Delphi 5 20.11.2007 12:43