Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 14.11.2009, 16:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Могу предположить, что проблемы в неудачно выбранном типе переменной а. У вас переменная a скорее всего иногда получает значение больше 31.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #17  
Старый 14.11.2009, 22:35
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

Попробовал "a" сделать word, все равно та же проблема...при ошибке различные числа вылетают((( Вот код формы:
Код:
  private
    { Private declarations }
  public
    function ReadIni(ASection, AString : String) : String;
    procedure WriteIni(ASection, AString, AValue : String);
    function poisk(a:word):boolean;
    procedure ZM;
    procedure vopros(a:word);
    procedure PR;
    procedure record_in_file;
    { Public declarations }
  end;

var
  Form7: TForm7;
  i:integer;
  famili,group:string;
  Spisok:array of byte;
  sch:byte;
  vern:byte;
  kol:byte;
  TimeOut:boolean;
  f:TextFile;
  flag: boolean;
  nevern:byte;
  a: string;
implementation

uses Unit2, Unit5, Math;

{$R *.dfm}


procedure TForm7.FormCreate(Sender: TObject);
begin
i:=0;
ProgressBar1.Position:=0;
end;
end;

procedure TForm7.FormShow(Sender: TObject);
begin
i:=0;
ProgressBar1.Position:=0;
end;

procedure TForm7.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Application.ProcessMessages;
end;

procedure TForm7.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
if ProgressBar1.Position=ProgressBar1.Max then
begin
Timer1.Enabled:=false;
TimeOut:=true;
PR;
end;
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
Randomize;
Form7.Caption:=inttostr(random(146));
end;

function TForm7.ReadIni(ASection, AString: String): String;
var
  sIniFile: TIniFile;
  sPath: String[60];
begin
  GetDir(0,sPath);
  sIniFile := TIniFile.Create(sPath + '\Cfg3.INI');
  result:=sIniFile.ReadString(ASection, AString,'00000000');
  sIniFile.Free;
end;

procedure TForm7.WriteIni(ASection, AString, AValue: String);
var
  sIniFile: TIniFile;
  sPath: String[60];
begin
  GetDir(0,sPath);
  sIniFile := TIniFile.Create(sPath + '\Cfg3.INI');
  sIniFile.WriteString(ASection, AString, AValue);
  sIniFile.Free;
end;

procedure TForm7.Button5Click(Sender: TObject);
begin
SpeedButton3.visible := true;
ProgressBar1.Max:=Form2.SpinEdit7.Value*60;
ProgressBar1.Position:=0;
Timer1.Enabled:=true;

Label3.Visible:=false;
Label4.Visible:=false;
Edit1.Visible:=false;
Edit2.Visible:=false;
Button5.Visible:=false;
SpeedButton1.visible:=false;
kol:=Form2.SpinEdit6.Value;

ZM;

if Edit1.Text<>'' then famili:= Edit1.Text else  famili:= 'не указана';
if Edit2.Text<>'' then group:=Edit2.Text else  group:= 'не указана';

Label1.Visible:=true;
Memo1.Visible:=true;
RadioGroup1.Visible:=true;
ProgressBar1.Visible:=true;
sch:=0;
vern:=0;
nevern:=0;
vopros(spisok[0]);
AssignFile(f,'c:\program files\result\'+famili+'_'+group+'.txt');
rewrite(f);
CloseFile(f);
flag:=true;
end;

function TForm7.poisk(a: word):boolean;
var
i,f:byte;
begin
   f:=0;
   for i:=0 to length(Spisok)-1 do
    if a=Spisok[i] then inc(f);
   if f>0 then Result:=true else Result:=false;
end;

procedure TForm7.Timer2Timer(Sender: TObject);
var
//  sIniFile: TIniFile;
  sPath: String[60];
begin
GetDir(0,sPath);
if FileExists(sPath + '\Cfg3.INI') then
begin
 Timer2.Enabled:=false;
 form2.SpinEdit6.Value:=strtoint(Form7.ReadIni('all','kolv'));
 form2.SpinEdit7.Value:=strtoint(Form7.ReadIni('all','kolm'));
 form2.SpinEdit8.Value:=strtoint(Form7.ReadIni('all','5'));
 form2.SpinEdit9.Value:=strtoint(Form7.ReadIni('all','4'));
 form2.SpinEdit10.Value:=strtoint(Form7.ReadIni('all','3'));
end
else
Begin
Timer2.Enabled:=false;
ShowMessage('файл конфигурации не создан, перейдите в меню настроек');
end
end;
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."

Последний раз редактировалось bleeep, 14.11.2009 в 22:54.
Ответить с цитированием
  #18  
Старый 14.11.2009, 22:36
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

Код:
procedure TForm7.ZM;
var
i,a:word;
label sn;
begin
Randomize;
SetLength(Spisok,kol);
for i:=0 to kol-1 do
 begin
 Spisok[i]:=255;
 end;
for i:=0 to kol-1 do
begin
 sn:
 a:=random(146);
 if poisk(a)=true then goto sn else Spisok[i]:=a;
end;

end;

procedure TForm7.Button6Click(Sender: TObject);
var
varnt:byte;
b:byte;
begin
record_in_file;
b:=spisok[sch];
if RadioButton1.Checked=true then varnt:=1;
if RadioButton2.Checked=true then varnt:=2;
if RadioButton3.Checked=true then varnt:=3;
if RadioButton4.Checked=true then varnt:=4;
if varnt=strtoint(ListBox1.Items[b*8+2]) then
Begin
inc(vern);
end
else
Begin
inc(nevern);
end;

if nevern>Form2.SpinEdit6.Value - Form2.SpinEdit10.Value then PR else

if sch=kol-1 then PR else
  begin
    inc(sch);
    vopros(spisok[sch]);
  end;
end;

procedure TForm7.vopros(a:word);

begin

   Memo1.Lines[0]:=ListBox1.Items[a*8]; <- здесь вылетает ошибка, компилятор на эту строку ссылается

   if strtoint(ListBox1.Items[a*8+1])=4 then
    begin
    RadioButton1.Visible:=true;
    RadioButton2.Visible:=true;
    RadioButton3.Visible:=true;
    RadioButton4.Visible:=true;
    RadioButton1.Caption:=ListBox1.Items[a*8+3];
    RadioButton2.Caption:=ListBox1.Items[a*8+4];
    RadioButton3.Caption:=ListBox1.Items[a*8+5];
    RadioButton4.Caption:=ListBox1.Items[a*8+6];
    end;
   if strtoint(ListBox1.Items[a*8+1])=3 then
    begin
    RadioButton1.Visible:=true;
    RadioButton2.Visible:=true;
    RadioButton3.Visible:=true;
    RadioButton4.Visible:=false;
    RadioButton1.Caption:=ListBox1.Items[a*8+3];
    RadioButton2.Caption:=ListBox1.Items[a*8+4];
    RadioButton3.Caption:=ListBox1.Items[a*8+5];
    end;
   if strtoint(ListBox1.Items[a*8+1])=2 then
    begin
    RadioButton1.Visible:=true;
    RadioButton2.Visible:=true;
    RadioButton3.Visible:=false;
    RadioButton4.Visible:=false;
    RadioButton1.Caption:=ListBox1.Items[a*8+3];
    RadioButton2.Caption:=ListBox1.Items[a*8+4];
    end;
    RadioButton1.Checked:=false;
    RadioButton2.Checked:=false;
    RadioButton3.Checked:=false;
    RadioButton4.Checked:=false;
end;

procedure TForm7.PR;
var
rez:byte;
begin
  Timer1.Enabled:=false;
  Label5.Visible:=true;
  Label1.Visible:=false;
  Memo1.Visible:=false;
  RadioGroup1.Visible:=false;
  speedButton2.Visible:=false;
  ProgressBar1.Position:=0;
  ProgressBar1.Visible:=false;
  Label3.Visible:=false;
  Label4.Visible:=false;
  Edit1.Visible:=false;
  Edit2.Visible:=false;
  Button5.Visible:=false;
  RadioButton1.Visible:=false;
  RadioButton2.Visible:=false;
  RadioButton3.Visible:=false;
  RadioButton4.Visible:=false;

  If vern>=Form2.SpinEdit8.Value then rez:=5 else
    if vern>=Form2.SpinEdit9.Value then rez:=4 else
      if vern>=Form2.SpinEdit10.Value then rez:=3 else
        rez:=2;

  //if TimeOut=true then rez:=2;
  Label5.Caption:='ваша оценка  - '+inttostr(rez)+' ';
  Label6.Visible:=true;
  Label6.Caption:='правильных ответов - '+inttostr(vern)+' ';
  Label7.Visible:=true;
  Label7.Caption:='неправильных ответов - '+inttostr(nevern)+' ';
  Memo2.Clear;
  Memo2.Lines.Add('правильных ответов - '+inttostr(vern));
  Memo2.Lines.Add('неправильных ответов - '+inttostr(nevern));
  if TimeOut=true then Memo2.Lines.Add('время истекло');
  Memo2.Lines.Add('оценка - '+inttostr(rez));
  
  record_in_file;
  SpeedButton1.Enabled:=true;

  TimeOut:=false;
end;

procedure TForm7.ListBox1Click(Sender: TObject);
begin
//ListBox1.Items.LoadFromFile('c:\program files\result\vkt3.ctf');
ListBox1.Items.LoadFromFile('test\vkt3.ctf');
end;

procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
//ListBox1.Items.LoadFromFile('c:\program files\result\vkt3.ctf');
ListBox1.Items.LoadFromFile('test\vkt3.ctf');
Label5.Visible:=false;
Label6.Visible:=false;
Label7.Visible:=false;
Label3.Visible:=true;
Label4.Visible:=true;
Edit1.Visible:=true;
Edit2.Visible:=true;
Button5.Visible:=true;
Edit1.Clear;
Edit2.Clear;
SpeedButton3.visible := false;
SpeedButton1.visible := false;
end;

procedure TForm7.record_in_file;
var
str1: string;
begin
  if flag=true then begin
  AssignFile(f,'c:\program files\result\'+famili+'_'+group+'.txt');
  Append(f);
  if label5.Caption<>'Label5' then begin
    str1:=label5.Caption;
    Writeln(f, str1);
    str1:=label6.Caption;
    Writeln(f, str1);
    str1:=label7.Caption;
    Writeln(f, str1);
    flag:=false;
    end
  else begin
    str1:=Memo1.Lines[0];
    writeln(f, str1);
    if RadioButton1.Checked then begin
      str1:=RadioButton1.Caption;
      writeln(f, str1);
    end;
    if RadioButton2.Checked then begin
      str1:=RadioButton2.Caption;
      writeln(f, str1);
      end;
    if RadioButton3.Checked then begin
      str1:=RadioButton3.Caption;
      writeln(f, str1);
end;
    if RadioButton4.Checked then begin
      str1:=RadioButton4.Caption;
      writeln(f, str1);
    end;

  end;
  CloseFile(f);
  end;
end;

procedure TForm7.SpeedButton2Click(Sender: TObject);
var
varnt:byte;
b:byte;
begin
if ((radiobutton1.Checked and radiobutton2.Checked and radiobutton3.Checked and radiobutton4.Checked)<>true) then speedbutton2.visible:=false
else speedbutton2.Visible :=true;
record_in_file;
b:=spisok[sch];
if RadioButton1.Checked=true then varnt:=1;
if RadioButton2.Checked=true then varnt:=2;
if RadioButton3.Checked=true then varnt:=3;
if RadioButton4.Checked=true then varnt:=4;
if varnt=strtoint(ListBox1.Items[b*8+2]) then
Begin
inc(vern);
end
else
Begin
inc(nevern);
end;

if nevern>Form2.SpinEdit6.Value - Form2.SpinEdit10.Value then PR else

if sch=kol-1 then PR else
  begin
    inc(sch);
    vopros(spisok[sch]);
  end;
end;

end.
Помогите пожалуйста, а то меня убьют в понедельник(((
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."

Последний раз редактировалось bleeep, 15.11.2009 в 10:55.
Ответить с цитированием
  #19  
Старый 14.11.2009, 22:49
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

И еще небольшое пояснение. У меня три таких формы(тесты на разную тему). При первых двух подобных ошибок не было. А в третьем количество вопросов в тесте значительно больше, может как то с этим связано???
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."
Ответить с цитированием
  #20  
Старый 14.11.2009, 23:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну проверить-то легко. Увеличть количество вопросов в любом из первых двух.
А вообще, в какой хоть строчке срабатывает исключение?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 14.11.2009 в 23:39.
Ответить с цитированием
  #21  
Старый 15.11.2009, 10:56
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

Страдалец в посте 18 пометил. В прцедуре vopros.
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."
Ответить с цитированием
  #22  
Старый 15.11.2009, 11:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тогда поместите этот блок в обработчик ошибки:
Код:
try
 Memo1.Lines[0]:=ListBox1.Items[a*8];
except
 ShowMessage(Format('Обращение к элементу %d из %d',[a*8,ListBox1.Count]));
end;
Тогда хоть определитесь в чем проблема с индексом массива.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #23  
Старый 15.11.2009, 15:55
Strider1000 Strider1000 вне форума
Прохожий
 
Регистрация: 08.11.2009
Сообщения: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от Konrad
Тогда или учить Делфи с 0 или в раздел работа.

Или выложи исходники, те что ты написал, и может у кого-то появиться желание их исправить, чисто от нечего делать.

Не вижу смысла идти в раздел "Работа".

Исходный код мне написали во втором посте. То, что было изначально у меня - бред сивой кобылы.

Если б знал с какого "нуля" начать - сам бы разобрался. Я сам с трудом понимаю, в чем его смысл этого задания, поэтому и просил помочь разобраться.

To NIch:

Единственное, что мне удалось уточнить по поводу задания: задание - составление матрицы, первое окно - кто работал, второе - матрица, третье - вывод результатов. Больше я ничего не знаю (никто из моей группы не знает), я даже не знаю какие значения ставить. Все же придерживаюсь изначального мнения, что это действительно полная безнадега. Действительно, кто мне сможет помочь, если даже не понятен смысл задания...
Ответить с цитированием
  #24  
Старый 15.11.2009, 21:01
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

Все я разобрался. Ура!)) Проблема то решилась просто))Я изменил путь к файлу в исходнике, а сам файл забыл переместить, в итоге прога считывала из старого, а там строк как раз 671)))
У меня еще небольшой вопрос. У меня вопросы берутся random'ом из файла. Как можно исключить повтор?
Допустим первый раз программа обратилась к 8й строке файла, затем произошел ответ и прога снова обращается random'ом к файлу. Нужно чтобы к любой но не 8й(т.е. не к той которая была и т.д.) Спасибо!)
Изображения
Тип файла: jpg err.JPG (4.5 Кбайт, 4 просмотров)
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."

Последний раз редактировалось bleeep, 15.11.2009 в 21:14.
Ответить с цитированием
  #25  
Старый 16.11.2009, 00:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Рад, что моя подсказка отдебажить помогла
А разве у вас функция poisk не для этого сделана?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #26  
Старый 16.11.2009, 11:31
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

to Strider1000...
Код:
program Matrix;
uses
 crt;
CONST
 n = 10;
var
 x : array[1..n,1..n] of integer;
 i , j : integer;
 a : real;
BEGIN
 randomize;
 clrscr;
 writeln ('Ф.И.О.');
 writeln (' Иванов Иван Иванович');
 writeln ('Группа');
 writeln (' 101');
 readln;
 for i := 1 to n do begin
  for j := 1 to n do begin
   x[i,j]:= random(n);
   write (x[i,j]);
   a := Ln(i);
   write (a);
  end;
  writeln;
  end;
 readln;
END.
Прога на паскале...ничего не далает только пишет ФИО группу и матрицу...что с матрицей делать то???
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #27  
Старый 16.11.2009, 19:28
Strider1000 Strider1000 вне форума
Прохожий
 
Регистрация: 08.11.2009
Сообщения: 11
Репутация: 10
По умолчанию

Вычислять...
Ответить с цитированием
  #28  
Старый 16.11.2009, 22:12
bleeep bleeep вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 37
Репутация: 10
По умолчанию

Страдалец, если честно я не с нуля писал, вот и появляются вопросы, да и программирую не так давно. Времени изучать глобально нету(((Я еще параллельно Perl изучаю). А насчет random не подскажите?
__________________
"I remember the good old days, when computers were
mainframes, analysts were magicians,and programmers
punced cards..."

Последний раз редактировалось bleeep, 16.11.2009 в 22:15.
Ответить с цитированием
  #29  
Старый 16.11.2009, 22:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тогда понятно.
Значит идея такая. Поскольку функция Random(N) генерит произвольно значение от 0 до N и эти значения могут повторятся, следовательно у еас есть два варианта получить все значения в этом диапазоне, но без повторов.
Вариант 1: Можно заранее сгенерировать список уникальных значений и потом использовать его для выдачи вопросов.
Вариант 2: Можно выдавать вопрос, занести его в список и в следующий раз сверится с этим списком прежде чем выдать следующий вопрос.
У вас в программе есть процедура Zm и функция poisk, которые в паре работают по второму варианту.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #30  
Старый 17.11.2009, 00:35
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Сообщение от Strider1000
Вычислять...
Ты видимо не совсем понимаешь, что такое матрица...слово вычислять не совсем подходит к ней...матрицы бывают разными и выполняют разные функции...
Вот чуть чуть инфы по матрицам...
http://ru.wikipedia.org/wiki/Матрица_(математика)
Посмотри и скажи что с ней делать...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter