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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.07.2008, 19:30
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию Помогите пожайлуста доработать тест!!

Вообщем есть исходник теста, я его уже подредактировал, только поверхностно. осталось пару штрихов и все. но штрихи эти я сам не осилю. поэтому и прошу помоши у форумчан.
Тест выкладываю архивом.

смысл теста: есть 100(к примеру) вопросов которые записаны в файле(в данном случае файле баз данных). Следом за вопросом зписаны и варианты ответов. А затем цифра правильного ответа.
Фрагмент этого файла:
"Вопр_ОЭ/1 Какая сталь обыкновенного качества относится к кипящей?
1. Сталь не полностью раскисленная марганцем при выплавке, и содержащая не более 0,05% кремния.
2. Содержащая кремния от 0,05 до 0,17%.
3. Содержащая более 10 мл. водорода на 100 г. металла.
end of question
1
end"
и так далее. Сам тест считывает из этого файла в случайном порядке 20 вопросов. В конце выводится результат : "Вы набрали 20 балов из 20" и этот результат записывается в файл. Сейчас внимание!!кульминация!!)
Нужно чтоб этот результат выводился не просто как сколько правильных ответов, а по следующей схеме: номер Вопроса - верно или не верно, и написан общий процент правильных ответов.
Очень Нужно!!! Помогите!! Если сделаете все красиво финансово отблагадорю.

Последний раз редактировалось dimi_87, 22.07.2008 в 21:41.
Ответить с цитированием
  #2  
Старый 22.07.2008, 19:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да сам справишься.
Смотри куда считываются эти 20 вопросов.
Сделай там поле для хранения того правильно ли ответили. При ответе на вопрос заноси туда значение.
в месте, где выводится результат бежишь циклом по массиву/списку и выводишь результат в файл, заодно считая процент.
Все.
Ответить с цитированием
  #3  
Старый 22.07.2008, 19:49
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

спасибо дружище. но боюсь не поднять мне этого. я вообще учусь на кафедре сварочного производства) в школе изучал паскаль. делфи как то давно баловался(по книжке). вот на кафедре попросили тест сделать.
нашел исходник в инете. сделал что смог под себя. а дальше встал....
Ответить с цитированием
  #4  
Старый 22.07.2008, 19:53
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

да кстати....dimkaant@yandex.ru это мыло на всякий случай.
Ответить с цитированием
  #5  
Старый 22.07.2008, 20:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Блин, форум ответ сожрал, скотина...
щаз повторю.
Ответить с цитированием
  #6  
Старый 22.07.2008, 20:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Добавления помечены знаками // !!!

Массив для хранения инфы
Код:
  private
  { Private declarations }
    vse_voprosy:array[1..max_voprosov]of tvse_voprosy;
    ispol_voprosy:array[1..voprosov_v_teste] of integer;

    RightAnswers : Array [1..voprosov_v_teste] of Boolean; //!!!

    schitano_voprosov:integer;
    tek_vopros,nomer:integer;
    file_s_voprosami:text;
    otvety_na_voprosy:array[1..voprosov_v_teste] of boolean;

Вывод результата:
Код:
procedure tform1.zapis_v_data_base;

  function BoolToStr(AValue : Boolean) : String;
  begin
    If AValue Then Result := 'правильный' Else Result := 'неправильный';
  end;

var
  file_db:textfile;
  I : Integer;
  C : Integer;
begin
 if fileexists(put_k_data_base+rasshirenie_file_data_base) then
  begin
   assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);
   append(file_db);
  end
  else
   begin
    assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);
    rewrite(file_db);
   end;


 writeln(file_db,'Имя '+student.name);
 writeln(file_db,'Фамилия '+student.familiya);
 writeln(file_db,'Организация '+student.group);
 writeln(file_db,'Дата '+datetostr(date));
 writeln(file_db,'Время '+timetostr(time));
 writeln(file_db,'Результат '+student.resultat);
 writeln(file_db,'        ');

 writeln(file_db,'Расшифровка результата:');
 C := 0;
 For I := 1 To voprosov_v_teste Do
  Begin
    writeln(file_db,'Вопрос № ' + IntToStr(I) + ' - Ответ ' + BoolToStr(RightAnswers[i]));
    If RightAnswers[i] Then Inc(C);
  End;
 writeln(file_db,'Всего '+IntToStr(Round(100*C/voprosov_v_teste))+'% правильных ответов');
 writeln(file_db,'        ');


{ flush(file_db);}
 closefile(file_db);
end;

Заполнение массива:
Код:
procedure TForm1.OtvetgotovClick(Sender: TObject);
var i:integer;
begin

 for i:=1 to max_otvetov-1 do
  begin    //n 200
   if otvet.Text=vse_voprosy[nomer].otvety[i] then
     begin    //n 201

      RightAnswers[tek_vopros] := True; // !!!
      messagedlg('Ответ правильный',mtconfirmation,[mbok],0);
      otvety_na_voprosy[tek_vopros]:=true;
      tek_vopros:=tek_vopros+1;

      otvet.SetFocus;
      if tek_vopros=voprosov_v_teste+1 then
  begin  //n 202
   messagedlg('Вы закончили тест по предмету ОС ваша оценка '+inttostr(form1.resultat),mtconfirmation,[mbok],0);
   student.resultat:=inttostr(form1.resultat);
   form1.zapis_v_data_base;
   close;
  end;  //k 202
  form1.vivod_voprosa;
      exit;
     end;   // k 201
  end;    // k 200
 if not(otvety_na_voprosy[tek_vopros]) then
  begin   //n 203
   messagedlg('Ответ неправильный',mtconfirmation,[mbok],0);
   RightAnswers[tek_vopros] := False; // !!!
   otvety_na_voprosy[tek_vopros]:=false;
   tek_vopros:=tek_vopros+1;

   if tek_vopros=voprosov_v_teste+1 then
  begin    //n 204
   messagedlg('Вы закончили тест по предмету ОС ваша оценка '+inttostr(form1.resultat),mtconfirmation,[mbok],0);
    student.resultat:=inttostr(form1.resultat);
    form1.zapis_v_data_base;
    close;
  end;     // k 204
  form1.vivod_voprosa;
  end;     // k 203

 otvet.SetFocus;
end;
Ответить с цитированием
  #7  
Старый 22.07.2008, 20:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Собственно, я бы сделал покрасивее, не на массивах, а на списках.
Точнее, редактор вопросов у меня давно сделан, но все никак не сделаю саму тестилку. По задумке поддерживается любое кол-во вопросов с любым кол-вом ответов, причем могут быть вопросы как с одним правильным ответом, так и с несколькими.
Ответить с цитированием
  #8  
Старый 22.07.2008, 20:14
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

сПАсибо большое!!! щас попробую!!! как сделаю отпишусь
Ответить с цитированием
  #9  
Старый 22.07.2008, 20:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, вообще-то, я проверил. Работает. Ты только в правльных местах вставь.

И эт-та... правильные вопросы перемешай
Ответить с цитированием
  #10  
Старый 22.07.2008, 20:38
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

Блин....ну ты красавчик!!!!!!!! работает!!
ты уж извиняй....у меня последний к тебе вопрос...что нужно прописать чтоб вот этот вот результат выводился на экран по окончанию тетса...
Ответить с цитированием
  #11  
Старый 22.07.2008, 20:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от dimi_87
Блин....ну ты красавчик!!!!!!!! работает!!
ты уж извиняй....у меня последний к тебе вопрос...что нужно прописать чтоб вот этот вот результат выводился на экран по окончанию тетса...

Мэ-э-э... в процке вывода результата в файл собери все в одну строку, а потом его ShowMessage или MessageDlg. Или сбор повтори там, где у тебя выводится сообщение о конце теста.

Собирать можно через #13#10 - это перевод строки.
Ответить с цитированием
  #12  
Старый 22.07.2008, 20:45
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

даааа......ладно щас попробую.....
Ответить с цитированием
  #13  
Старый 22.07.2008, 20:54
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

не получается....ошибку выдает..может я не то делаю..
Ответить с цитированием
  #14  
Старый 22.07.2008, 21:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее всего.
Ты где хочешь вывести это сообщение?
Ответить с цитированием
  #15  
Старый 22.07.2008, 21:05
dimi_87 dimi_87 вне форума
Прохожий
 
Регистрация: 22.07.2008
Сообщения: 20
Репутация: 10
По умолчанию

там же где он говорит что тест закончен вы набрали столько то ответов

Последний раз редактировалось dimi_87, 22.07.2008 в 21:08.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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