Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++$Delphi]Создание теста. 
:(
    Опции темы
djeyana
Дата 27.6.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 27.6.2007

Репутация: нет
Всего: нет



Как правильно сделать пример теста? Т.е. есть несколько вопросов,к каждому из них свои варианты ответов.Варианты ответов отмечаются радио кнопками.Вопросы должны появляться в случайном порядке.Допустип есть 15 вопросов, из них отображать должно только 10 случайных.Человек выбрал ответы, нажал готово , и появляется табличка с результатами.Помогите, пожалуйста.

Модератор: Название темы должно отражать ее суть!

M
MAKCim
При чем здесь С++?


Это сообщение отредактировал(а) MAKCim - 28.6.2007, 12:44
PM MAIL   Вверх
zkv
Дата 27.6.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



djeyana, ОС хоть укажи, компилятор. 
Вообще сам(сама) делать собираешься, или за тебя надо написать? Если последний вариант, то тебе в Центр помощи
PM MAIL   Вверх
ip127001
Дата 28.6.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: нет
Всего: -1



тест маленький можешь в массив загнать
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Solomon
Дата 28.6.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Вопросы должны грузится с файла? или это не существенно?
Вариантов ответов должно быть определеное количество? или это не столь существено?



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
djeyana
Дата 28.6.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 27.6.2007

Репутация: нет
Всего: нет



Вариантов должно быть четыре.Вопросы должныбыть в случайном порядке.Варианты ответов- повозможности тоже.Насчет файла- не принципиально.
PM MAIL   Вверх
Earnest
Дата 28.6.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 2
Всего: 183



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
...
PM   Вверх
Solomon
Дата 28.6.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



Если время не поджимает... могу сегодня впринципе помочь с этим, но только когда домой прийду... это около 9 будет... щас на работе немогу этим занятся.. хотя и работы там не сильно много... если будет интересно напиши на аську она есть в профиле...


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
apook
Дата 28.6.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Цитата(djeyana @  28.6.2007,  18:26 Найти цитируемый пост)
Вариантов должно быть четыре

Мне кажетс я что вопросы не надо грузить в память, а непосредственно с файлом работать
иначе вдруг захочется добавить вопросиков и вариантиков, хотя при нынешниих обьемах памяти...  ну не на одной же тачке ее запускать, а в некотрых конторах до сих пор третий пень
и 64 оперативки.



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Solomon
Дата 28.6.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: 2
Всего: 2



apook, просто иногда бывает просто надо написать для лабы... абы було.. а уж доводить до совершенсво дорого для лабы обойдется... 


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
apook
Дата 28.6.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Я вот тут все никак доделать не могу, прога но у нее примочка типа шифрование правильных
ответов есть и сохранение их в спец файл, правда вариант консольный smile но вдруг понравится
Код

#include<fstream.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<time.h>

struct date d;
time_t t;

fstream mainh;




int digitstr( char numstrb[] )
{
int i, j;
for( i=0, j=0; numstrb[ i ]!='\0'; ++i )
    if( !isdigit(numstrb[ i ]) )
        j++;
return ( j>0 ) ? (-1) : 0;
}


int cipher_up( int key, int &x, int year )
{
x+=year;
return ( key >=0 ) ? cipher_up( --key, x, year++ ) : x;
}

int cipher_down( int key, int &x, int year )
{
x-=year;
return ( key >=0 ) ? cipher_down( --key, x, year++ ) : x;
}

/*  || */
void minpassw( int variantov, int voprosov, int otvetov, int year, int key )
{
//variant - количество вариантов
//voprosov- количество вопросов
//otvetov - количество ответов на каждый вопрос
//key - ключь
int i, j, c;
int x=0;

srand( (unsigned)time(&t) );

mainh.seekg( 0, ios::beg );

mainh.write( (char *)&variantov, sizeof(int) );
mainh.write( (char *)&voprosov, sizeof(int) );

for( i=0; i<variantov; i++ )
{
    for( j=0; j<voprosov; j++ )
    {
        x=rand() % (otvetov);
        cipher_up( key, x, year );
        mainh.write( (char *)&x, sizeof(int) );

        }

    }

return;
}


int minread( int variant, int vopros, int year, int key )
{
int *DT, *BT, i, j, x;

DT=new int[ 2 ];

mainh.clear();
mainh.seekg( 0, ios::beg );

for( i=0; i<2; ++i )
    mainh.read( (char *)&DT[ i ], sizeof(int) );

if( variant>DT[ 0 ] || variant<=0 )
{
    cout << "Incorrect number of variant!";
    return (-1);
    }
else if( vopros>DT[ 1 ] || vopros<=0 )
{
    cout << "Incorrect number of question!";
    return (-1);
    }

BT=new int[ DT[ 1 ] ];
--variant;
--vopros;

mainh.flush();
mainh.seekg( (variant*(DT[ 1 ]*sizeof(int)))+(vopros*sizeof(int)), ios::cur );
mainh.read( (char *)&x, sizeof(int) );

x=cipher_down( key, x, year );


delete [] DT;
delete [] BT;
//mainh.flush();
return x;
}



void main( int argc, char *argv[] )
{
fstream f_inout;
char filename[ 20 ], cmdl[ 50 ];
int i, j, c, variantov=0, voprosov=0, otvetov=0, KEY=0, *correct, *msg, ly;
getdate( &d );


//cоздать бинарный файл для сохранения параметров
mainh.open( "main.$$$", ios::in | ios::out | ios::binary );
if( mainh.fail() ) //Проверка на открытие файла
{
    cout << "Ошибка чтения файла параметров\n";
    getch(); // остановка до нажатия любой клавиши
    exit( 1 );
    }


if( argc>1 )
    strcpy(  cmdl, argv[ 1 ] );

else
{
    for( ly=0; ly!=3 && ly!=2 && ly!=1; )
    {
        clrscr();
        cout << "[ 1 ] Создать экзамен" << endl
             << "[ 2 ] экзаменировать" << endl
             << "[ 3 ] Выход" << endl
             << "Введите 1,2,3 : ";
        cin >> ly; 
        cin.ignore(); 

        switch( ly )
        {
            case 1:
                strcpy( cmdl, "create" );
                argc=2;
            break;
            case 2:
                strcpy( cmdl, "examin" );
                argc=2;
            break;
            case 3:
                return;
            } 
        }
    }


if( stricmp(cmdl, "create")==0 )


    if( argc==5 )
    {
        variantov=atoi( argv[ 2 ] );
        voprosov=atoi( argv[ 3 ] );
        otvetov=atoi( argv[ 4 ] );
        }
    else
    { 
        cout << "Введите кол-во вариантов, кол-во вопросов, кол-во ответов (через пробел)[ENTYER]";
        cin >> variantov >> voprosov >> otvetov;
        }
    if( voprosov>0 )  correct=new int[ voprosov ];
    else
    {
        cout << "Error !" << endl;
        return;
        }

    // ==-- данные генерируются и вносятся в служебный файл --==
    minpassw( variantov, voprosov, otvetov, d.da_year, KEY );
 
    for( i=1; i<=variantov; i++ )    // файлов 
    { 
        itoa( i, filename, 10 );
        strcat( filename, "_varnt.txt" );

        f_inout.open( filename, ios::out );
        if( f_inout.fail() ) //Проверка на открытие файла
        {
            cout << "Ошибка чтения файла вариынта\n";
            getch(); 
            exit( 1 );
            }
        //вносим начальные данные
        f_inout << ";          --+-- \n"
                << ";          --+-- \n"
                << ";          Вариант номер - " << i << " \n"
                << ";\n";

        for( c=1; c<=voprosov; ++c ) //узнаем правильные ответы на этот вариант
            correct[ c-1 ]=((minread( i, c, d.da_year, KEY ))+1);

        for( j=1; j<=voprosov; j++ ) // вопросов
        {                       
            f_inout << "---------------------------------\n"
                    << "Вопрос номер " << j  << "\n"
                    << "---------------------------------\n"
                    << "              Место для\n"
                    << "               вопроса\n"
                    << "\n"
                    << "Ответы: \0";
             for( c=1; c<=otvetov; c++ ) // ответов
                 f_inout << c << " \0";
             f_inout << "\n";

             f_inout << "Правильный: " << correct[ j-1 ] << " ;<-- это удалить!" << endl
                     << "^^ " << j << endl;
             }
        f_inout.close();
        }
    }
else if( strstr(cmdl, "examin") )
{
    char c_in[ 10 ]="\x1";
    for( ; digitstr(c_in)==(-1); )
    {
        clrscr();
        cout << "Enter number of variant [ENTER]: ";
        cin.get( c_in, 10 );
        cin.ignore(); 
        }
    strcpy( filename, c_in );
    strcat( filename, "_varnt.txt" );

    f_inout.open( filename, ios::in );
    if( f_inout.fail() ) //Проверка на открытие файла
    {
        cout << "Error reading file " << filename << endl;
        getch(); 
        exit( 1 );
        }
    else
    {
        char *textLine=new char[ 1000 ];
        mainh.clear();
        mainh.flush();
        mainh.seekg( 0, ios::beg );
                   
        for( c=0; c<2; ++c ) //считаем из сл. файла колич-о вопр 
            mainh.read( (char *)&voprosov, sizeof(int) );
        msg=new int[ voprosov ];
        correct=new int[ voprosov ];
        for( c=1; c<=voprosov; ++c ) //узнаем правильные ответы на этот вариант
            correct[ c-1 ]=((minread( atoi(c_in), c, d.da_year, KEY ))+1);


        for( int c=0; !f_inout.eof(); )
        {
            f_inout.getline( textLine, 1000 );
            if( textLine[ 0 ]=='^' && textLine[ 1 ]=='^' ) //остановка для диалога
            {
                strcpy( c_in, "\x1" );
                for( ; digitstr(c_in)==(-1); )
                {
                    cout << "Variant of answer (0-to exit)[ENTER]: ";
                    cin.get( c_in, 10 );
                    cin.ignore(); 
                    }
                if( c_in[ 0 ]=='0' ) return;
                else if( atoi(c_in)!=correct[ c ] )
                {
                    msg[ c ]=0;
                    cout << "Not good!" << endl;
                    }
                else
                {
                    msg[ c ]=1;
                    cout << "good!" << endl;
                    }
                ++c;
                }
            else
                if( textLine[ 0 ]!=';' ) cout << textLine << endl;

             }

        clrscr();
        cout << "\n-== Resultat ==-\n";
        for( c=0; c<voprosov; c++ )
        {
            cout << "\nAnswer " << c+1;
            if( msg[ c ]==1 ) cout << " True";
            else cout << " False";
            }  
        getch();

        delete [] msg;
        //delete [] correct;
        delete [] textLine;
        }
    }

    
mainh.close();
delete [] correct;
return;
}

писAл под bcc32



Работает так:
При запуске появляется типа меню диалог с предлож-ем 3 вариантов
выбираешь создать экзамен, создаются заготовки файлов экзаменов( столько сколько укажешь вариантов)
там будет строка с правильным вариантом, пишешь в место где должен быть вопрос свой вопрос так
чтоб правильным был указанный ответ, эту строку надо удалить, программа знает правильный ответ
главное самому его запомнить, вобщем усе smile



Это сообщение отредактировал(а) apook - 28.6.2007, 19:38


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.