fscanf(stream,"%c",&vald);
FileCont[i][j]=vald;
++j;
if (vald=='\n') {FileCont[i][j-1]='\0'; ++i; j=0;}
}
FileCont[i][j-1]='\0';
fclose(stream);
return i;
}
Этот модуль аналогичен предыдущему, только он возвращает количество строк в файле
И не записывает характеристики вопросов
/*
Данная функция предназнацена для ввода 1 - го вопроса в файл с вопросами ввод данных(вопроса) осуществляется по средством самой функции
*/
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "grani.h"
int read (conteinf);
void write ()
{
//описание переменных
int N, i, j, h;
conteinf FCont;
identq SQ;
FILE *fp;
strw str;
//прочтение файла в массив FCont и чтение количества строк в нем в массив N
N = read (FCont);
cout<<"Введите вопрос:"<<endl;
i=0;//порядковый номер вводимой пользователем строки
str[0]='1';//сначала установим нчальный симвал не 0 чтобы завелся цикл
while (str[0]!='0')//делаем пока пользователь не введът строку с нулем
{
++i;
str[0]=' ';
str[1]='\0';//эти две строки создают нейтральную строку, что позволяет избежать ошибок
gets(str);//принимаем введенную пользователем строку
if (str[0]==0) str[0]=' ';//если пользователь переходит на новую строку
if (str[0]!=0) //если пользовотель ввел строку
{
for (j=0; j<=strlen(str); j++)//делаем пока не достигнем конца введенной строки
FCont[N+i][j]=str[j];//в массив, содержащий содержание файла дописываем новую строку
}
}
//когда пользователь ввел ноль и решил что пора закончить ввод вопроса
N=N+i-1;//изменяем в опер памяти размер файла + строки
clrscr();
cout<<"Запись..."<<endl;
j=1;
fp=fopen("vopros.dat","w");// открываем файл для записи
for (i=0; i<=N; i++) //запись в файл
{
if (i==0)
fprintf(fp,"%s", FCont[i]);
else
fprintf(fp,"\n%s", FCont[i]);
}
clrscr();
cout<<endl<<"Записано"<<endl;
fclose(fp);
}
Этот модуль осуществляет запись нового вопроса в файл. Вызывает функцию READ.
Ввод данных осуществляется при помощи функции READ и есть построчный ввод вопросов для записи (переменная strw str)
/*
void testing ()
______________________________________________________________
Данная функци осуществляет тестирование, а именно:
1-просчет какие вопросы следует выводить
2-вывод вопросов по одному
3-ввод ответов на каждый вопрос
4-подсчет и вывод результатов
______________________________________________________________
*/
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "grani.h"
int readall (conteinf, identq );
void testing ()
{
//описание переменных
int bal=0, i, j, k, N, n, vopr,bl,key=0;
char otv[2];
conteinf FCont;
identq SQ;
//чтение файла и ввод количества выводимых вопросов
N = readall(FCont, SQ);
i=1;
while (i)
{
clrscr();
cout<<endl<<"Вопросов в вайле: "<<N;
cout<<endl<<"Вывести вопросов: "; cin>>n;
if ((n<=0)||(n>N))
{
cout<<endl<<"Введено некорректрое количество вопросов";
getch();
}
else
i=0;
}
randomize();
bl=N/n;//размер блока
if (N%n) key=1; //если блоков не целое число? то 1 блок будет рассматриваться
if (bl==0) bl=1;//блок должен иметь длину
cout<<endl;
vopr=0; //номер выводимого вопроса
for (i=1; i<=n; i++) //выполняем столько раз скока нада вывести вопросов
{
clrscr();
//проверяем что нада сделать
if (key==0) bl=N/n;//если перыый раз меняли длину блока то на исходную длину
if (bl==0) bl=1; //блок всегда имеет длину
if (key==1)//если нада считаем макс. длину первого блока
{
if (bl==1) bl=N-bl*n;//если блок состоит из 1 вопроса
else
bl=N-bl*(n-1); //если блок состоит из более 1 вопроса
key=0;
}
k=0;//порядковый номер в текущем блоке
while (!k) k=random(bl+1); //номер вопроса в блоке не может быть равен 0
//прибавляем к выведеным вопросам сгенерированое количество каторое случайно из размера блока
vopr=vopr+k;
//выводим вопрос номер vopr
for (j=SQ[vopr][1]+1; j<=SQ[vopr][1]+1+SQ[vopr][2]-2; j++)//выводим текущий вопрос
cout<<FCont[j];
//вводим ответ
cout<<endl<<"Ответ: ";
gets(otv);
//если ответ правильный, то добавляем балл
if (otv[0]==FCont[SQ[vopr][1]][0]) ++bal;
//ставим настройки для следующего повтора цикла
otv[0]=0;
vopr=vopr+bl-k;
}
clrscr();
cout<<"Вы ответили на "<<bal<<" вопросов из "<<n;
}
Этот модуль принимает только количество вопросов (int n) и ответы на вопросы
(char otv[2])
/*
conteinf[максимум строк в файле][максимальная длина строки]
strw[максимальная длина строки]
identq[максимум вопросов в файле][3]
заметьте что между conteinf и strw должно быть соответствие
*/
typedef char conteinf[100][100];
typedef int identq[100][3];
typedef char strw[100];
Содержание этого файла хорошо описывает его суть
Как именно работают модули хорошо описано в пояснительных строках. Поэтому блок схемы модулей не представлены
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.