Форум программистов, компьютерный форум 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; int ReadTextFile(char *fname); // Открывает файл
C++ сформировать массив из произведений элементов каждой строки дан вещественный массив R 7*7 состоящий из 7 строк и 7 столбцов, а также скалярные значения состоящие из вещественных чисел А и В. Надо сформировать массив из произведений элементов каждой строки, находящихся в пределах A<R <=B; если таких элементов в строке нет, результат должен быть равен 0 http://www.cyberforum.ru/cpp-beginners/thread36232.html
графика на Borland C++ v5.02 C++
СРОЧНО НУЖНА КАКАЯ НИБУДЬ РАБОТА С ГРАФИКОЙ (АНИМАЦИИ) НА СИ++. ЖЕЛАТЕЛЬНО ЧТО НИБУДЬ ОРИГИНАЛЬНОЕ. НАПРИМЕР БЬЮЩЕЕСЯ СЕРДЦЕ, ЧАСЫ У КОТОРЫХ СТРЕЛОЧКА ДВИГАЕТСЯ, НУ ИЛИ ДРУГОЕ. НАДЕЮСЬ, У КОГО НИБУДЬ ЗАВАЛЯЛОСЬ ЧТО НИБУДЬ СТОЯЩЕЕ :good: ЗАРАНЕЕ СПАСИБО =* Добавлено через 32 минуты 19 секунд с графикой на СИ++ не реботала ни разу, поэтому представления не имею как это делать :'( помогите...
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" Неправильно выполняет код, взятый из учебника Кернигана и Ритчи (программа возведения в степень). Точнее сказать он его исполняет не полностью, а только выводит 2 в 10 степени и все. На остальные девять случаев похоже просто забивает. Кстати с массивами такая же песня... Пожалуйста подскажите что... подробнее

Показать сообщение отдельно
Deiron
25 / 25 / 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. Массивы и связанные списки", да и вообще, если ваша дальнейшая судьба хоть как то связана с панорамированием, то эта книга может быть для вас весьма и весьма полезной
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru