Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Работа с файлами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Надо доделать лабу (дело нескольких минут) http://www.cyberforum.ru/cpp-beginners/thread36240.html
Эта программа удаляет лишние пробелы из текстового файла file.DAT #include <iostream.h> #include <fstream.h> #include <iomanip.h> #include <string.h> #include <conio.h> using namespace std; ...
C++ сформировать массив из произведений элементов каждой строки дан вещественный массив R 7*7 состоящий из 7 строк и 7 столбцов, а также скалярные значения состоящие из вещественных чисел А и В. Надо сформировать массив из произведений элементов каждой строки,... http://www.cyberforum.ru/cpp-beginners/thread36232.html
графика на Borland C++ v5.02 C++
СРОЧНО НУЖНА КАКАЯ НИБУДЬ РАБОТА С ГРАФИКОЙ (АНИМАЦИИ) НА СИ++. ЖЕЛАТЕЛЬНО ЧТО НИБУДЬ ОРИГИНАЛЬНОЕ. НАПРИМЕР БЬЮЩЕЕСЯ СЕРДЦЕ, ЧАСЫ У КОТОРЫХ СТРЕЛОЧКА ДВИГАЕТСЯ, НУ ИЛИ ДРУГОЕ. НАДЕЮСЬ, У КОГО НИБУДЬ...
C++ Мини апгрейд кода (абзацы)
Вот код //--------------------------------------------------------------------------- #pragma hdrstop #include <iostream.h> #include <fstream.h> #include <conio.h> ...
C++ e^х=1+х/1!+х^2/2!+...+x^n/n!+ http://www.cyberforum.ru/cpp-beginners/thread36212.html
e^х=1+х/1!+х^2/2!+...+x^n/n!+... помогите плиз:)
C++ программа возведения в степень Друзья, я "начинающий" в СИ и поэтому столкнулся с такой проблемой: мой компилятор "Miracle C" Неправильно выполняет код, взятый из учебника Кернигана и Ритчи (программа возведения в степень). Точнее... подробнее

Показать сообщение отдельно
Deiron
26 / 26 / 1
Регистрация: 25.05.2009
Сообщений: 98
28.05.2009, 03:54
Начнем с простого. random без повторения делается примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 int a;
 //int num_q1,num_q2 - номера вопросов.
 //l1, l2 - списки вопросов из первого и второго файлов с номерами варианта и 
 //текстом вопроса
 randomize();//не нужно, если где-то в программе уже запускался.
 a=random(количество оставшихся неиспользованными вопросов)+1; 
 num_q1=l1.getquestnum(a);//взять номер вопроса а-того билета и поместить его в 
                                      //num_q1
 a=random(количество оставшихся неиспользованными вопросов)+1;
 num_q2=l2.getquestnum(a);
 while (num_q2==num_q1){
      a=random(количество оставшихся неиспользованными вопросов)+1;
      num_q2=l2.getquestnum(a);
 }
 l1.delete(num_q1);//удаляем использованые вопросы из списков вопросов
 l2.delete(num_q2);
// уменьшаем количество неиспользованных вопросов на 1
Почему так? Ну, потому что без удаления вопросов из списка вы потом намучаетесь с учетом использованых вопросов (ведь нужно выбирать вопросы только из тех, что ранее не использовались). Почему значение варианта а-того билета а не само а? Думаю, вы это поймете, если представите себе ситуацию, когда из 20 билетов остается, скажем, 5, и вы берете из них, допустим, 3й слева.

Чтение из файла:
делается цикл while(!(f.eof())){действия}
вам могут пригодится следующие ф-ции:
istream& get(куда,сколько символов,символ ограничения); для вопроса формата 1. текст этот симовл - '.' а для самого текста - тут уж определитесь сами. (если текст вопроса занимает несколько строк, то при установке символа ограничения '\0' могут возникнуть проблемы). Можете так же посмотреть про getline
istream& ignore (2,EOF); - удалить 2 символа из входного потока (мы "взяли" номер варианта, но точка и пробел остались. Вот их то мы и пропускаем). Попробуете написать функцию чтения из файла самостоятельно?
Далее, по поводу вашего кода:
C++
1
2
3
4
5
6
7
8
9
10
11
QUES* head=0;//разве компилятор не будет ругаться на не статическую //переменную, объявленную вне main-а? И вместо 0 лучше все же написать NULL
void add(QUES* LC)//LC - адрес нового элемента списка, который 
{   LC->next=0;
   if(head==0)
      { head=LC;
        return;
      }
   QUES* cur=head;
   while(cur->next) cur=cur->next;
   cur->next=LC;
}
В принципе, данный код верен, но:
1. у вас класс используется фактически как структура. Смысл? Если класс не нужен, объявляйте как struct.
2. Если это класс, то зачем делать add внешним?
3. Зачем делать один список, если проще сделать 3 и один класс-контейнер, который этими 3 списками будет управлять?
(2 списка на вопросы из первого и второго файла, один, в котором вы будете хранить информацию по билетам (очень близко к тому, что сейчас есть у вас в ques))
4. Дополнительная претензия к функции display (ну люблю я придираться, что с меня возьмешь?):
C++
1
2
3
4
5
void QUES:: display()
{
      cout<<name<<" "<<ques1<<" "<<ques2<<"\n";
      if (next) {next->display();}
}
Если написать ее так, объявив ее внутри класса QUES, то она выведет весь список без всяких мучений. Метод класса вызывается точно так же, как производится доступ к полю класса. (l1.show())

Чтобы разобраться со списками рекомендую вам поискать в сети книгу Джесса Либерти "Освой C++ самостоятельно за 21 день." Там все очень хорошо описано в главе "День 13. Массивы и связанные списки", да и вообще, если ваша дальнейшая судьба хоть как то связана с панорамированием, то эта книга может быть для вас весьма и весьма полезной
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru