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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2015, 16:34   #1
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию генерация чисел в delphi

Уважаемы программисты помогите с решением задачи
генерацию набора цифр от нуля до девяти (количество объектов в наборе должно изменяться от одного до девяти, одинаковые цифры в наборе не допускаются);
вывод набора цифр пользователю в одной из определённых в индивидуальном задании графических форм в течение фиксированного промежутка времени;
вывод пользователю всех цифр (в заданной графической форме) для того, чтобы он мог указать, какие из них входили в набор;
индикация ошибок пользователя (при их наличии).
Графическая форма:
Римские цифры, словесная форма, цвет шрифта.
Подскажите пожалуйста с чего начать. Спасибо.
На форуме покурил темы подходящего не нашел.
Deman1986 вне форума Ответить с цитированием
Старый 28.01.2015, 17:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например начни отсюда: http://delphiworld.narod.ru/base/dec_to_roman.html
А дальше, если я правильно понял задачу, в цикле генерировать цифры и выводить их.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2015, 15:00   #3
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

Спасибо вам большое за подсказку. Я просто не пойму структуру программы. Что куда писать.
Deman1986 вне форума Ответить с цитированием
Старый 03.02.2015, 07:04   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Что куда писать.
Значит до этого еще очень далеко. Сначала продумайте общий принцип работы. Затем определитесь со структурами данных и только потом уже стоит браться за реализацию на конкретном языке.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 03.02.2015, 09:34   #5
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

вот набросал
Код:
unit main;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Button1: TButton;
    Timer1: TTimer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
 
implementation
 
{$R *.dfm}
function DecToRoman(Decimal: LongInt): string;
const
Romans: array[1..9] of string =
('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX');
  Arabics: array[1..9] of Integer =
  (1, 2, 3, 4, 5, 6, 7, 8, 9);
var
  i: Integer;
  scratch: string;
begin
  scratch := '';
  for i := 9 downto 1 do
    while (Decimal >= Arabics[i]) do
    begin
      Decimal := Decimal - Arabics[i];
      scratch := scratch + Romans[i];
    end;
  Result := scratch;
end;
 
 
 
end.
только я немного не пойму как реализовать генерируем случайное число по количеству элементов. (поскольку элементов 9 то генерируем число от 1 до
9, в вашем случае.)
2 значинеие текущей позиции и позиции сгенерированной, меняем местами.
Делаем так для каждого элемента массива. То есть 9 шагов цикла

Ну например исходное положение
1 2 3 4 5 6 7 8 9

сгенерированно число 6
После первого шага массив примет вид
6 2 3 4 5 1 7 8 9

и так далее.
В словестном виде?
Значит нужен массив слов
{'Один','Два','Три','Четыре','Пять' ,'Шесть','Семь','Восемь','Девять'}
человек подсказал, я вот думаю сижу
Deman1986 вне форума Ответить с цитированием
Старый 03.02.2015, 09:40   #6
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

По принципу работы
1. Будет поле вывода данных, кнопка сгенерировать. на кнопку будет прописан код генерации.
2. будет таймер для отведения времени вывода информации на экран пользователю
3. Поле вывода данных и кнопка для отображения всех выводимых элементов.
4. Поле вывода и кнопка для вывода словестной формы.
Так я представлю себе программу.
Deman1986 вне форума Ответить с цитированием
Старый 03.02.2015, 09:55   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Deman1986, Вы не расстраивайтесь, что не совсем понимаете задание.
Дело в том, что по моему мнению, задание у Вас немножко дебильное..
Тот, кто придумывал универсальные задания (общий текст задания общий для всех, а отличаются в задании детали - какие цифры и как их выводить). Но составитель не учёл, что бывают позиционные системы счисления (наша десятичная запись арабскими цифрами - как раз такая) и НЕ ПОЗИЦИОННЫЕ (пример - римская система записи чисел)!

И ключевое отличие здесь в том, что для
римской записи чисел это
Цитата:
генерацию набора цифр от нуля до девяти (количество объектов в наборе должно изменяться от одного до девяти, одинаковые цифры в наборе не допускаются)
БЕССМЫСЛЕНО!
во-первых, римских ЦИФР нет от нуля до девяти! Если кто-то забыл, то римские цифры - это I V X L C D M

во-вторых, нельзя составить "НАБОР" цифр (содержащий более 1-й цифры) так, чтобы получить корректную запись ЧИСЛА. да и девять НЕПОВТОРЯЮЩИХСЯ цифр нельзя взять из набора, в котором всего 7 знаков присутствует!

в третьих, что есть "словесная форма" - это лучше уточнять у преподавателя.

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


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

ДОБАВЛЕНО через пару минут..
Цитата:
Сообщение от Deman1986
По принципу работы
принцип работы, нормальный. Только Вы забыли, что пользователю программы надо дать возможность "указать, какие цифры входили в набор"

Последний раз редактировалось Serge_Bliznykov; 03.02.2015 в 09:59.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.02.2015, 09:59   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
function DecToRoman(Decimal: LongInt): string;
И при этом нет проверки ввода. Здесь требуется уточнение Вам нужны настоящие римские цифры? Просто 50 по Вашему алгоритму будет... будет ли? Римскими цифрами это будет L.
Опять же
Цитата:
генерацию набора цифр от нуля до девяти (количество объектов в наборе должно изменяться от одного до девяти, одинаковые цифры в наборе не допускаются);
При том римляне насколько мне известно нуля не придумали (их цифры были отражением вещественных показателей реальных объектов мира, а не абстрактная категория). В общем над этим нужно думать .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.02.2015, 11:53   #9
Deman1986
Пользователь
 
Регистрация: 08.04.2013
Сообщений: 16
По умолчанию

переделал
Код:
unit main;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

function DecToRoman(Decimal: LongInt): string;
const
Romans: array[1..9] of string =
('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX');
  Arabics: array[1..9] of Integer =
  (1, 2, 3, 4, 5, 6, 7, 8, 9);
var
  i: Integer;
  scratch: string;
begin
  scratch := '';
  for i := 9 downto 1 do
    while (Decimal >= Arabics[i]) do
    begin
      Decimal := Decimal - Arabics[i];
      scratch := scratch + Romans[i];
    end;
  Result := scratch;
  end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
// ÷èñëà îò 1 äî 9 âêëþ÷èòåëüíî áóäóò îòîáðàæàòüñÿ ïîñëåäîâàòåëüíî
Label1.Caption:=Label1.Caption +' ' + IntToStr(Random(8)+1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//íàäî îáÿçàòåëüíî èíèöèëèçèðîâàòü ãåíåðàòîð
Randomize;
  Timer1.Interval := 5000; // 5 ñåêóíä
    Timer1.Enabled := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := false;
end;

end.
но как сделать вывод цифр не повторяющимися и с римским обозначением. Спасибо за помощь
Deman1986 вне форума Ответить с цитированием
Старый 05.02.2015, 13:29   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
но как сделать вывод цифр
Начните с этого. У Вас на это есть замечательный компонент - TEdit. Его свойство Text (можно исследовать например по нажатию на кнопку) содержит те данные которые ввел пользователь.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация больших простых чисел. Реализация алгоритма BBS. (Delphi) AnnNoob Помощь студентам 0 18.05.2013 19:00
Генерация ID из чисел. krategus Помощь студентам 0 06.04.2012 10:06
генерация чисел(С++) Ildblik Помощь студентам 6 12.09.2010 17:13
генерация чисел nXs Общие вопросы Delphi 2 13.08.2010 11:39
Генерация случайных чисел?! Evgeny_1 Фриланс 12 17.03.2010 14:23