Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi]прога для проверки памяти и внимательности 
:(
    Опции темы
Phenom
Дата 7.5.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Написать программу для проверки и развития памяти и внимательности. Программа должна выводить на экран таблицу, в ячейках которой случайным образом расположены случайные целые числа от 0 до 99, показывать в течение ограниченного промежутка времени, после чего предлагать пользователю повторить заполнение таблицы и проверять ответ. Уровень сложности заданий (размер таблицы, количество чисел, причём, возможно наличие пустых ячеек, время показа) может выбираться пользователем. Статистическая информация (имя испытуемого, сложность задания, результаты проверки ответа) сохраняются в текстовом файле.
PM MAIL   Вверх
Phenom
Дата 15.5.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



up
PM MAIL   Вверх
Qu1nt
Дата 16.5.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: нет
Всего: 50



Что не получается-то?
PM MAIL   Вверх
Phenom
Дата 16.5.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
THandle
Дата 16.5.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(Phenom @  16.5.2008,  10:55 Найти цитируемый пост)
массив вывести в стринггрид


Как то так:

Только сначала массив заполняешь.

Код


const
  MAX = 5;



Код


var
  a : array[1..5, 1..5] of string;


Код


procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : integer;
begin
  StringGrid1.RowCount := MAX;
  StringGrid1.ColCount := MAX;
  for i := 1 to MAX do
    for j := 1 to MAX do
      StringGrid1.Cells[i, j] := a[i, j];
end;




Цитата(Phenom @  16.5.2008,  10:55 Найти цитируемый пост)
показать его на заданное время по таймеру и очистить


Бросаешь на форму таймер, ставишь у него Enabled = false.

К предыдущей процедуре добавляешь:


Код


procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : integer;
begin
  StringGrid1.RowCount := MAX;
  StringGrid1.ColCount := MAX;
  for i := 1 to MAX do
    for j := 1 to MAX do
      StringGrid1.Cells[i, j] := a[i, j];
  Timer1.Interval := 5000;//допустим показываем на пять секунд
  Timer1.Enabled := true;
end;


Теперь событие OnTimer таймера:

Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to MAX do
    StringGrid1.Cols[i].Clear;
  Timer1.Enabled := false;
end;



Цитата(Phenom @  16.5.2008,  10:55 Найти цитируемый пост)
Потом юзер заполняет ячейки грида. 


Добавляем к таймеру:

Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to MAX do
    StringGrid1.Cols[i].Clear;
  Timer1.Enabled := false;
  StringGrid1.Options := StringGrid1.Options + [goEditing];
end;



Цитата(Phenom @  16.5.2008,  10:55 Найти цитируемый пост)
По нажатию кнопки они переписываются в другой массив такой же структуры


Код


var
  b : array[1..5, 1..5] of string;



Код

procedure TForm1.Button2Click(Sender: TObject);
var
  i, j : integer;
begin
  StringGrid1.RowCount := MAX;
  StringGrid1.ColCount := MAX;
  for i := 1 to MAX do
    for j := 1 to MAX do
      b[i, j] := StringGrid1.Cells[i, j];
end;



Цитата(Phenom @  16.5.2008,  10:55 Найти цитируемый пост)
и производится сранение двух массивов.


Код


procedure CmpAraay;
var
  i, j : integer;
begin
  for i := 1 to MAX do
    for j := 1 to MAX do
      if a[i, j] = b[i, j] then
        //делаешь что хочешь...
end;

PM   Вверх
Phenom
Дата 16.5.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



THandle Спасибо.

Вот код
Код
unit Unit1;

interface

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

type
  TMyMass = array[0..99] of Integer; 

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    SpinEdit1: TSpinEdit; // размер сетки (число строк или стобцов)
    SpinEdit2: TSpinEdit; // число цифр
    SpinEdit3: TSpinEdit; // время отображения в секундах
    Button1: TButton;     // кнопка подготовки теста
    Button2: TButton;     // кнопка проверки результата
    Timer1: TTimer;

    procedure FormCreate(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure StringGrid1Exit(Sender: TObject);
  private
    { Private declarations }
    A, B : TMyMass;  // А исходный, В для результата
    Size : Integer;  // размер сетки
    N    : Integer;  // число цифр

    procedure ClearGrid;
    procedure FillGrid(var Mass: TMyMass);
    procedure ShowGrid(Mass: TMyMass);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  R : TGridRect;
begin
  SpinEdit1Change(nil);
  SpinEdit2Change(nil);
end;

// изменился размер сетки
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
  Size := SpinEdit1.Value;
  SpinEdit2.MaxValue := Sqr(Size);
  with StringGrid1 do begin
    ColCount := Size;
    RowCount := Size;
    DefaultColWidth := Trunc((Width - 4) / Size) - 1;
    DefaultRowHeight := Trunc((Height - 4) / Size) - 1;
  end;
end;

// изменилось число цифр
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
  N := SpinEdit2.Value;
end;

// подготовка теста
procedure TForm1.Button1Click(Sender: TObject);
begin
  FillGrid(A);
  ShowGrid(A);

  Timer1.Interval := SpinEdit3.Value * 1000;
  Timer1.Enabled := True;
end;

// проверка результата
procedure TForm1.Button2Click(Sender: TObject);
begin
// считывание из грида в масств В и сравнение его с массивом А
// вывод правильного расположения цифр при ошибке и сбор статистики
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  ClearGrid;
  StringGrid1.Options := StringGrid1.Options + [goEditing];
end;

// снимает выделение ячейки
procedure TForm1.StringGrid1Exit(Sender: TObject);
var
  R : TGridRect;
begin
  with R do begin
    Left:=-1; Top:=-1; Right:=-1; Bottom:=-1;
  end;
  StringGrid1.Selection := R;
end;

// очистка сетки
procedure TForm1.ClearGrid;
var
  i : Integer;
begin
  with StringGrid1 do begin
    Options := Options - [goEditing];
    for i:=0 to Size * Size - 1 do
      Cells[i mod Size, i div Size] := '';
  end;
end;

// заполнение сетки
procedure TForm1.FillGrid(var Mass: TMyMass);
var
  i, j : Integer;
begin
  ClearGrid;
  for i:=0 to 99 do Mass[i] := -1;

  i := 0;
  while i < N do begin
    j := Random(Size * Size);
    if Mass[j] = -1 then begin
      Mass[j] := Random(100);
      Inc(i);
    end;
  end;
end;

// отображение сетки
procedure TForm1.ShowGrid(Mass: TMyMass);
var
  i : Integer;
begin
  for i:=0 to Size * Size - 1 do
    if Mass[i] <> -1 then
      StringGrid1.Cells[i mod Size, i div Size] := IntToStr(Mass[i]);
end;

end.




Код
// проверка результата
procedure TForm1.Button2Click(Sender: TObject);
begin
// считывание из грида в масств В и сравнение его с массивом А
// вывод правильного расположения цифр при ошибке и сбор статистики
end;



Нужно написать проверку результата учитывая выше описанный код.


Это сообщение отредактировал(а) Phenom - 16.5.2008, 14:36
PM MAIL   Вверх
THandle
Дата 16.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Phenom, выложи прогу в виде архива пожалуйста.
PM   Вверх
Phenom
Дата 16.5.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Вот. 

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  _____111.rar 197,56 Kb
PM MAIL   Вверх
Phenom
Дата 29.5.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Доделайте кто-нибудь плиз, очень нужно.
PM MAIL   Вверх
Phenom
Дата 1.6.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Grids, Menus, ComCtrls, jpeg;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    BtnBegin: TButton;
    Timer1: TTimer;
    StringGrid2: TStringGrid;
    BtnReady: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    Label3: TLabel;
    Label4: TLabel;
    Timer2: TTimer;
    procedure BtnBeginClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure BtnReadyClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ch:byte;

implementation

uses nastroy, stat, choosePro,help,about;
{$R *.dfm}


procedure TForm1.BtnBeginClick(Sender: TObject);
var i:byte;
begin
  Randomize;
  StringGrid1.Visible:=true;
  StringGrid2.Visible:=false;
  BtnReady.Visible:=false;
  Label2.Visible:=false;
  ch:=0;
  Timer1.Enabled:=true;
  Timer1.Interval:=200;
  ProgressBar1.Max:=time;
  For i:=1 to NumObj do
    StringGrid1.Cells[1,i]:='';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:byte;
begin
  if ch=3 then
    label3.Visible:=true;
  If ch=6 then
    begin
      Label3.Visible:=false;
      Label4.Visible:=true;
    end;
  If ch=9 then
    begin
      Label4.Visible:=false;
      Label1.Visible:=true;
      For i:=1 to NumObj do
        begin
          StringGrid1.Cells[0,i]:=intTostr(i);
          StringGrid1.Cells[1,i]:=intTostr((Random(1000)+Random(100)*10+Random(10)*100)mod(100));
        end;
      end;
  If ch>9 then
    begin
      ProgressBar1.Visible:=true;
      ProgressBar1.position:=ProgressBar1.Max-ch+10;
    end;
  If ch=(time+10) then
     begin
      ProgressBar1.Visible:=false;
      Label2.Visible:=true;
      StringGrid1.Visible:=false;
      StringGrid2.Visible:=true;
      BtnReady.Visible:=true;
      For i:=1 to 10 do
        begin
          StringGrid2.Cells[0,i]:=intTostr(i);
          StringGrid2.Cells[1,i]:='';
        end;
      Timer1.Enabled:=false;
      end;
  ch:=ch+1;
end;

procedure TForm1.BtnReadyClick(Sender: TObject);
var i,right:byte;
    a,b:string;
    isfile:boolean;
    fstat:Textfile;
begin
  right:=0;
  For i:=1 to NumObj do
    IF StringGrid1.Cells[1,i]=StringGrid2.Cells[1,i] then
      right:=right+1;
  ShowMessage('Количество правильных чисел  '+intTostr(right));
  StringGrid1.Visible:=true;
  BtnReady.Visible:=false;
  If StatusBar1.Panels[0].Text<>'Гость' then
    begin
      a:='Statistik/'+curProf+'.txt';
      isFile:=FileExists(a);
        If isFile then
          begin
            assignfile(fstat,a);
            append(fstat);
            b:=Statusbar1.Panels[1].Text+'               '+intTostr(time)+'                 '+intTostr(NumObj)+'                  '+intTostr(right);
            Writeln(fstat,b);
            closefile(fstat);
          end
        else
          begin
            assignfile(fstat,a);
            Rewrite(fstat);   
            b:=Statusbar1.Panels[1].Text+'               '+intTostr(time)+'                 '+intTostr(NumObj)+'                  '+intTostr(right);
            Writeln(fstat,b);
            closefile(fstat);
          end;
      end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.cells[0,0]:='Индекс';
  StringGrid1.cells[1,0]:='Число';
  StringGrid2.Cells[0,0]:='Индекс';
  StringGrid2.cells[1,0]:='Число';
  time:=20;
  NumObj:=10;
  StringGrid1.RowCount:=NumObj+1;
  StringGrid2.RowCount:=NumObj+1;
  StringGrid1.Height:=18*(NumObj+2);
  StringGrid2.Height:=18*(NumObj+2);
  StatusBar1.Panels[0].Text:='Гость';
end;

procedure TForm1.N7Click(Sender: TObject);
begin
  Option.ShowModal;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
  FormStat.Show;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
  Close;
end;



procedure TForm1.N2Click(Sender: TObject);
begin
  FormChooseProf.ShowModal;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  StatusBar1.Panels[1].Text:=timeTostr(now);
end;

procedure TForm1.N9Click(Sender: TObject);
begin
   FormHelp.Show;
end;

procedure TForm1.N10Click(Sender: TObject);
begin
  FormAbout.Show;
end;
//TInifile=class

end.



Код есть. Может кто-нибудь объяснить его? Т.е пояснить каждую строчку ну или хотя бы вообщем.

Это сообщение отредактировал(а) Phenom - 1.6.2008, 11:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.