Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 2
Регистрация: 19.06.2015
Сообщений: 6

Перевод из Delphi в C++. Создание теста.

06.05.2012, 18:11. Показов 1572. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перевожу программу из Delphi в C++, код элементарно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
Var Left_N : Integer;  // Отступ слева верхней части 
    Top_N  : Integer;  // Отступ сверху 
    Left_NN: Integer;  // Отступ слева для раздела ответов 
    Top_NN : Integer;  // Отступ сверху для RadioButton 
    K, I   :Integer; 
 
Left_N:=30; 
Top_N:=50; 
Left_NN:=60;
 
Form1.Caption:='Создание теста'; 
Form1.Width:=740; 
Form1.Height:=540; 
 
Label1.Left:=Left_N; 
Label1.Top:=Top_N; 
Label1.Font.Style:=[fsBold]; 
Label1.Font.Size:=10; 
Label1.Caption:='Название теста'; 
 
Edit1.Text:=''; 
Edit1.Top:=Top_N; 
Edit1.Left:=Left_N+Label1.Width+10; 
Edit1.Width:=300; 
 
Top_N:=Top_N+40; 
 
Label2.Left:=Left_N; 
Label2.Top:=Top_N; 
Label2.Font.Style:=[fsBold]; 
Label2.Font.Size:=10; 
Label2.Caption:='Количество вопросов'; 
 
SpinEdit1.Left:=Left_N+Label2.Width+10; 
SpinEdit1.Top:=Top_N; 
SpinEdit1.MinValue:=5; 
SpinEdit1.MaxValue:=20; 
SpinEdit1.Text:='5'; 
SpinEdit1.Width:=40; 
 
Top_N:=Top_N+60; 
 
Label3.Left:=Left_N; 
Label3.Top:=Top_N; 
Label3.Font.Style:=[fsBold]; 
Label3.Font.Size:=10; 
Label3.Caption:='Вопрос № 1'; 
 
Top_N:=Top_N+40; 
 
Label4.Left:=Left_NN; 
Label4.Top:=Top_N; 
Label4.Font.Style:=[fsBold]; 
Label4.Font.Size:=9; 
Label4.Caption:='Текст'; 
 
Edit2.Text:=''; 
Edit2.Top:=Top_N; 
Edit2.Left:=Left_NN+Label4.Width+10; 
Edit2.Width:=600; 
Left_NN:=Left_NN+Label4.Width+10; 
 
Top_N:=Top_N+40; 
 
GroupBox1.Left:=620; 
GroupBox1.Top:=Top_N+20; 
GroupBox1.Width:=90; 
GroupBox1.Height:=180; 
GroupBox1.Caption:=' Правильный '; 
GroupBox1.Font.Size:=8; 
 
K:=2; Top_NN:= -20; 
For I:=1 To 4 do 
  begin 
  Top_N:=Top_N+40; Top_NN:=Top_NN+40; 
 
  TLabel(FindComponent('Label'+IntToStr(K+I+2))).Left:=Left_NN; 
  TLabel(FindComponent('Label'+IntToStr(K+I+2))).Top:=Top_N; 
  TLabel(FindComponent('Label'+IntToStr(K+I+2))).Font.Size:=9; 
  TLabel(FindComponent('Label'+IntToStr(K+I+2))).Caption:='Ответ № 
'+IntToStr(I); 
 
  TEdit(FindComponent('Edit'+IntToStr(K+I))).Text:=''; 
  TEdit(FindComponent('Edit'+IntToStr(K+I))).Top:=Top_N; 
  TEdit(FindComponent('Edit'+IntToStr(K+I))).Left:=200; 
  TEdit(FindComponent('Edit'+IntToStr(K+I))).Width:=400; 
 
 TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Left:=40; 
 TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Top:=Top_NN; 
 TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Caption:=''; 
 TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Width:=10; 
 
 
Top_N:=Top_N+70; 
 
Button1.Caption:='Предыдущая'; 
Button1.Left:=Left_NN+100; 
Button1.Top:=Top_N; 
Button1.Width:=100; 
Button1.Height:=30; 
Button1.Enabled:=False; 
 
Button2.Caption:='Следующая'; 
Button2.Left:=Left_NN+250; 
Button2.Top:=Top_N; 
Button2.Width:=100; 
Button2.Height:=30; 
Button3.Caption:='Записать'; 
Button3.Left:=Left_NN+500; 
Button3.Top:=Top_N; 
Button3.Width:=100; 
Button3.Height:=30; 
Button3.Enabled:=False; 
 
STEP:=1;   //Номер вопроса = 1
Переведенный в С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 int Left_N;
  int Top_N;
  int Left_NN;
  int Top_NN;
  int K;
  int I;
 
  Left_N=30;
  Top_N=50;
  Left_NN=60;
 
  Form1->Caption="Ñîçäàíèå òåñòà";
  Form1->Width = 740;
  Form1->Height = 540;
 
  sLabel1->Left = Left_N;
  sLabel1->Top = Top_N;
  sLabel1->Font->Size = 10;
  sLabel1->Caption = "Íàçâàíèå òåêñòâ";
 
  sEdit1->Text="";
  sEdit1->Top=Top_N;
  sEdit1->Left=Left_N+sLabel1->Width+10;
  sEdit1->Width=300;
 
  Top_N=Top_N+40;
 
  sLabel2->Left=Left_N;
  sLabel2->Top=Top_N;
  sLabel2->Font->Size=10;
  sLabel2->Caption="Êîëè÷åñòâî âîïðîñîâ";
 
  sSpinEdit1->Left=Left_N+sLabel2->Width+10;
  sSpinEdit1->Top=Top_N;
  sSpinEdit1->MinValue=5;
  sSpinEdit1->MaxValue=20;
  sSpinEdit1->Text='5';
  sSpinEdit1->Width=40;
 
  Top_N=Top_N+60;
 
  sLabel3->Left=Left_N;
  sLabel3->Top=Top_N;
  sLabel3->Font->Size=10;
  sLabel3->Caption="Âîïðîñ ¹ 1";
 
  Top_N=Top_N+40;
 
  sLabel4->Left=Left_NN;
  sLabel4->Top=Top_N;
  sLabel4->Font->Size=9;
  sLabel4->Caption="Òåêñò";
 
  sEdit2->Text="";
  sEdit2->Top=Top_N;
  sEdit2->Left=Left_NN+sLabel4->Width+10;
  sEdit2->Width=600;
  Left_NN=Left_NN+sLabel4->Width+10;
 
  Top_N=Top_N+40;
 
  sGroupBox1->Left=620;
  sGroupBox1->Top=Top_N+20;
  sGroupBox1->Width=90;
  sGroupBox1->Height=180;
  sGroupBox1->Caption="Ïðàâèëüíûé";
  sGroupBox1->Font->Size=8;
 
  K=2; Top_NN=-20;
  for (I=0; I<=4;)
  {
  Top_N=Top_N+40; Top_NN=Top_NN+40;
 
 
 
  ((TsLabel*)FindComponent("sLabel"+IntToStr(K+I+2)))->Left=Left_NN;
  ((TsLabel*)FindComponent("sLabel"+IntToStr(K+I+2)))->Top=Top_N;
  ((TsLabel*)FindComponent("sLabel"+IntToStr(K+I+2)))->Font->Size=9;
  ((TsLabel*)FindComponent("sLabel"+IntToStr(K+I+2)))->Caption="Îòâåò ¹"+IntToStr(I);
 
  ((TsEdit*)FindComponent("sEdit"+IntToStr(K+I)))->Text="";
  ((TsEdit*)FindComponent("sEdit"+IntToStr(K+I)))->Top=Top_N;
  ((TsEdit*)FindComponent("sEdit"+IntToStr(K+I)))->Left=200;
  ((TsEdit*)FindComponent("sEdit"+IntToStr(K+I)))->Width=400;
 
  ((TsRadioButton*)FindComponent("sRadioButton"+IntToStr(I)))->Left=40;
  ((TsRadioButton*)FindComponent("sRadioButton"+IntToStr(I)))->Top=Top_NN;
  ((TsRadioButton*)FindComponent("sRadioButton"+IntToStr(I)))->Caption="";
  ((TsRadioButton*)FindComponent("sRadioButton"+IntToStr(I)))->Width=10;
 }
Все компилирует но при запуске выдает ошибку
Project Project1.exe raised exeception class EAccessViolation with message 'Access violation at address 4010598C in module 'vcl60.bpl'. Read of address 00000048'. Process stopped. Use Step or Run to continue.
Добавлено через 42 минуты
И еще вопрос. В конце кода в delphi, что означает
Delphi
1
STEP = 1
?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2012, 18:11
Ответы с готовыми решениями:

Создание програмы-теста на DELPHI
Помогите создать тест на Делфи про Строковый тип данных Паскаля=))

Создание теста на Delphi с использованием данных из MS Access
передо мной задача Разработать программу тестирования по одному из разделов курса «Прикладное программирование», в которой выбор...

Создание файла (txt) теста через Delphi
Не создаёт файл с вопросами и ответами, даже если есть уже созданный файл, то всё равно не пишет в него, а показывает, что указан другой...

4
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.05.2012, 19:27
Шаг, отличный от шага по умолчанию:
C++
1
int i = i%2; // а данном случае, i кратное 2
0
0 / 0 / 2
Регистрация: 19.06.2015
Сообщений: 6
06.05.2012, 20:41
Ошибка в этих строках

с 76 по 89
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
07.05.2012, 16:49
Aleksey, никогда не понимал смысла переводить элементарнейший код с Delphi на С++ Builder...
Ну скажите, неужели вы САМОСТОЯТЕЛЬНО не можете написать пару простых вещей для вашего приложения?

По поводу ошибок:
Вы ищете компоненты у родителя с помощью метода FindComponent... а вы не думали о том, что таких компонентов просто может не быть?
Делайте элементарную проверку на ненулевой указатель.

И, судя по всему, пишется опять какой-нибудь очередной "тестер"...
Поиск использовали? Как насчёт вот этого: Как написать программу тестирования?
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.05.2012, 18:32
Вот так вот...
C++
1
((TClass *)ComponentName)->
можно писать лишь в случае, если есть абсолютная уверенность, что компонент (
ComponentName) существует; иначе ошибка неизбежна. У Вас, судя по всему, по четыре компонента разных классов, а в цикле Вы совершаете пять итераций. Придумайте код покрасивее (или счетчик цикла уменьшите...).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2012, 18:32
Помогаю со студенческими работами здесь

Создание теста для проверки знаний в Delphi
Здравствуйте, нужно создать небольшой тест, вопросы и ответы находятся в базе данных. Так же при выборе ответа необходимо что бы они...

Создание программы-теста(оценивание знаний) и вывод теста в форму, с подсчетом оценки(балл за правильный ответ)
Здравствуйте, уважаемые форумчане. У меня назрел еще один вопрос: -Есть задание написать приложение, которое осуществляет...

Текстовые файлы. Перевод теста в азбуку МОРЗЕ
Вводимый из файла текст перевести в последовательность точек и тире с помощью азбуки Морзе! Нужно написать программу в Паскале!

Написание теста в Delphi
столкнулся с проблемой у меня вопросы к тесту хранятся в текстовом файле ,прочитать файл я смог только у меня выводит все вопросы сразу...

Форма с результатами теста в Delphi 7
Надо чтобы на отдельной форме вместо просто надписи с результатом было примерно так:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru