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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2013, 13:02   #1
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
Радость программа тест (перевод с смол бейсика)

Привет. Начал изучать g++
хочу перевести не большую программу со смол бейсика на с ++
Программа доложна открывать файл (допустим текстовой) и брать всю информацию(вопросы, ответы, оценку... тд)
Если нужно скину код программы взятую с учебника смол бейсика.
мои возможные ошибки - неверная функция считывания строки из файла.
mes[], level[] не объявлены.
Спасибо.

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
//f = "f.txt"; // файл теста
int nq = 0; // количество вопросов
int nRight = 0; // количество правильных ответов
int answ = 0; // номер выбранного ответа
int n = 1; // номер строки, читаемой из файла
string title = File.ReadLine(f,n);
n = n + 1;
for (int i = 1; i < 4; i++)
{
mes[i] = File.ReadLine(f,n);
n = n + 1;
level[i] = File.ReadLine(f,n);
n = n + 1;
}
eof = false; // для входа в цикл while
while (eof != true)
{
// прочитать вопрос
q = File.ReadLine(f,n);

if (q != "")
{
// прочитать очередно вопрос
nq = nq + 1 // счетчик вопросов
system("clear");
cout << title << endl;
cout << "Вопрос " + nq;

// вывести вопрос
cout << q;
n = n + 1;

// прочитать количество вариантов ответа
na = File.ReadLine(f,n);
n = n + 1;

// прочитать номер правильного ответа
right = File.ReadLine(f,n);
n = n + 1;

// прочитать и вывести варианты ответа
for (int i; i != na; i++)
{
s = File.ReadLine(f,n);
n = n + 1;
// вывод варианта ответа;
cout << i + ". " << s;
}
// здесь выведен вопрос и варианты ответа
// получить от испытуемого номер ответа
cout << endl;
cout << "Ваш выбор-> ";
cin >> answ;

if (answ == right)
{
// испытуемый выбрал правильный ответ
nRight = nRight + 1;
else
eof = true; // достигнут конец файла
}
} // конец while
//процесс тестирование завершен
system("clear");
cout << title;
cout << "Всего вопросов: " << nq << endl;
cout << "Правильных ответов: " << nRight << endl;

// обработка результата тестирования
i = 1; // пусть правильных ответов достаточно для
// получения лучшей оценки!
// если это не так входим в цикл
while (nRight < level[i] && i < 4)
{
i = i + 1; // понизим уровень оценки
}
cout << "Оценка: " << mes[i]) << endl;

}
/*здесь файл f.тхт
История Санкт-Петербурга
Отлично
7
Хорошо
6
Удовлетворительно
5
Плохо
4
Архитектор Исаакиевского собора:
3
2
Доменико Трезини
Огюст Монферран
Карл Росси
Александровская колона воздвигнута в 1836 г. как памятник, посвященный:
2
1
деяниям императора Александра I
подвигу народа в Отечественной войне 1812 года
Архитектор Зимнего дворца:
3
1
Бартоломео Растрелли
Карл Росси
Огюст Монферран
Михайловский замок построен по проекту:
3
3
Воронихина Андрея Никифоровича
Старова Ивана Егоровича
Баженова Василия Ивановича
Остров, на котором находится Ботанический сад, называется:
3
3
Заячий
Медицинский
Аптекарский
Невский проспект получил свое название
3
2
по имени реки, на которой стоит Санкт-Петербург
по имени близко расположенного монастыря, Александро-Невской лавры
в память о знаменитом полководце - Александре Невском
Скульптура памятника Петру I "Медный всадник" выполнена
2
1
Фальконе
Клодтом
*/
dniks вне форума Ответить с цитированием
Старый 12.03.2013, 17:53   #2
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

/*программа все еще с ошибками!*/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
ifstream f ("f.txt"); // файл теста
int nq = 0; // количество вопросов теста (счетчик)
int nRight = 0; // количество правильных ответов
/*для текущего вопроса*/
int na = 0; // количесво вариантов ответа
int right = 0; // номер правильного ответа
int answ = 0; // номер выбранного ответа
char mes[250];
char level[250];
char s[250];
int n = 1; // номер строки, читаемой из файла

/*названия теста*/
char title[250];
f.getline(title,sizeof(title));
n = n + 1;

/*Читаем критерии оценки - сообщение и количество правильных ответов,
необходимое для достижения уровня*/
for(int i = 1; i < 4; i++)
{
f.getline(mes, sizeof(mes));
n = n + 1;

f.getline(level, sizeof(level));
n = n + 1;
}

bool eof = false; // для входа в цикл
while(eof != true)
{
// прочитать вопрос
char q[250];
f.getline(q, sizeof(q));

if(q != "")
{
// прочитан очередной вопрос
nq = nq + 1; // увеличиваем счетчик

system("clear");
cout << title << endl;
cout << "Вопрос " << nq;

// вывести вопрос
char q[250];
cout << f.getline(q, sizeof(q));
n = n + 1;

/*прочитать количество вариантов ответа*/
f >> na;
n = n + 1;

/*прочитать номер правильного ответа*/
f >> right;
n = n + 1;

/*прочитать и вывести варианты ответа*/
for(int i = 1; i < na; i++)
{
f.getline(s, sizeof(s));
n = n + 1;
// вывод варианта ответа
cout << i << ". " << s << endl;
}
// здесь выведен вопрос и варианты ответа

// получить от испытуемого номер ответа
cout << endl;
cout << "Ваш выбор: ";
cin >> answ;

if(answ == right)
{
// испытуемый выбрал правильный ответ
nRight = nRight + 1;
}
else
// не удалось прочитать очередной вопрос
eof = true; // достигнут конец файла
}
} // endwhile

/*процесс тестирования завершен*/
system("clear");

cout << title << endl;
cout << "Всего вопросов: " << nq << endl;
cout << "Правильных ответов: " << nRight << endl;

/*Обработка результата тестирования*/
int i = 1; // пусть все ответы будут верны

/*Если это не так, входим в цикл*/
while(nRight < level[1] && i < 4)
{
i = i + 1; // понизим уровень оценки
}
cout << "Оценка: " << mes[i] << endl << endl;
return 0;
}
dniks вне форума Ответить с цитированием
Старый 20.03.2013, 02:40   #3
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

рабочая программа. помогла книжка Культина. Текстовой файл надо переделать
примерно так....
Архитектор Исаакиевского собора:
3 2
Доменико Трезини
Огюст Монферран
Карл Росси
Александровская колона воздвигнута в 1836 г. как памятник, посвященный:
2 1
деяниям императора Александра I
подвигу народа в Отечественной войне 1812 года
Архитектор Зимнего дворца:
3 1
..........
#include <iostream>
#include <fstream>
#include <cstdlib>
//#include <cstdio>
using namespace std;
int main(int argc, char* argv[])
{
FILE* file; // файл теста
file = fopen("text.txt", "r");
int nq = 0; // количество вопросов теста
int nRight = 0; // количество правильных ответов
/*для текущего вопроса*/
int nAnsw; // количество альтернативных ответов
int nNumRight; // Номер парвильного ответа
int answ; // Номер выбранный пользователем

int p; // Процент правильных ответов

char st[500]; // Строка из файла

int i; // Счетчик циклов

while(true)
{
system("clear");
fgets(st, 500, file); // читаем из файла вопрос
if(!feof(file))
{
nq++;
printf("%s\n", st); // вывести на экран

fscanf(file, "%i %i", &nAnsw, &nNumRight); // Кол-во вариантов ответа и номер парвильного ответа.
fgets(st, 500, file); // дочитать конец предыдущей строки.
/*читае и выводим варианты ответов*/
for(i = 1; i <= nAnsw; i++)
{
fgets(st, 500, file);
printf("%i. %s", i, st);
}
printf("\nВаш выбор: ");
scanf("%i", &answ);
if(answ == nNumRight)
{
nRight++;
}
}
else{
break;}

}
/*Обработка результата тестирования, вычислим процент правильных ответов*/
p = 100 * nRight / nq;
if(p == 100) puts("ОТЛИЧНО!");
if(p <= 99 && p >= 80) puts("ХОРОШО!");
if(p >= 60 && p <= 79) puts("УДОВЛЕТВОРИТЕЛЬНО!");
if(p < 60) puts("НЕУДОВЛЕТВОРИТЕЛЬНО!");

cout << "правильных ответов: " << nRight << endl;
cout << "всего вопросов: " << nq << endl;

return 0;
}
dniks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отличия Бейсика от Паскаль _Санек_ Общие вопросы Delphi 7 17.10.2010 01:58
Перевод с Бейсика на VBA Majesty13 Помощь студентам 2 22.06.2010 15:33
Тест программа на С++ K[Lanc]N Помощь студентам 2 20.02.2009 17:29
программа тест deadh5n1 Помощь студентам 1 12.12.2007 17:12