|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.03.2013, 13:02 | #1 |
Пользователь
Регистрация: 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 Фальконе Клодтом */ |
12.03.2013, 17:53 | #2 |
Пользователь
Регистрация: 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; } |
20.03.2013, 02:40 | #3 |
Пользователь
Регистрация: 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; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отличия Бейсика от Паскаль | _Санек_ | Общие вопросы 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 |