Другие языки программирования и технологии
Нужно очень срочно создать программу. На языке c ++
вот условия: Составить программу для контроля знаний. В программе задается один вопрос, ответ на который включает несколько наименований (например, "назовите все элементы периодической системы, представляющие группу галогенов? " или "назовите все города с населением свыше одного миллиона? " и т. п.) . В памяти ЭВМ хранится список наименований, являющийся полным ответом на вопрос. Введенный ответ необходимо сравнить с правильным.
ну дык создай. и создай "срочно".
Мы то причем?
Ловишь халяву? - дык она не планируется.
_Сделай_ и запрашивай подсказки как исправить и на что обратить внимание.
А пока от тебя только "нужно сделать". то тебе "тебе нужно -ты и делай"
Мы то причем?
Ловишь халяву? - дык она не планируется.
_Сделай_ и запрашивай подсказки как исправить и на что обратить внимание.
А пока от тебя только "нужно сделать". то тебе "тебе нужно -ты и делай"
#include
#include
#include
typedef struct QUESTION {
char *qst;
char **answ;
int cnt;
struct QUESTION *next;
} question_t;
typedef enum RESULT {
R_OK = 0, R_NOT_MATCH = 1, R_BAD_QUESTION = 2, R_BAD_ANSWER = 3
} result_t;
question_t * new_question(question_t *last){
static char buf[BUFSIZ], *p;
question_t *q;
int i;
if ( ( q = (question_t *)malloc(sizeof(question_t)) ) == NULL ){
fprintf(stderr, "memory error!\n");
return NULL;
}
printf("Enter question:\n> ");
if ( ! fgets(buf, BUFSIZ, stdin) ){
fprintf(stderr, "Can't get string!\n");
free(q);
return NULL;
}
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ){
fprintf(stderr, "Empty string!\n");
free(q);
return NULL;
}
if ( ( q->qst = strdup(buf) ) == NULL ){
fprintf(stderr, "Memory error!\n");
free(q);
return NULL;
}
printf("Enter answers one by string with empty one at finish:\n");
q->cnt = 0;
q->answ = NULL;
while ( 1 ){
printf("> ");
if ( ! fgets(buf, BUFSIZ, stdin) ){
fprintf(stderr, "Can't get string!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
if ( p = strchr(buf, '\n') )
*p = '\0';
if( ! *buf )
break;
if (( q->answ = (char**)realloc(q->answ, sizeof(char*) * (q->cnt + 1)) ) == NULL ){
fprintf(stderr, "Memory error!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
if ( ( q->answ[q->cnt] = strdup(buf) ) == NULL ){
fprintf(stderr, "Memory error!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
q->cnt += 1;
}
if ( ! q->answ ){
fprintf(stderr, "No answers given!\n");
free(q->qst);
free(q);
return NULL;
}
q->next = NULL;
if ( last )
last->next = q;
return q;
}
void delete_questions(question_t *q){
question_t *t;
int i;
while ( q ){
t = q->next;
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
free(q->qst);
free(q);
q = t;
}
}
RESULT check_answer(const question_t *q, const question_t *a){
int i, j;
if ( ! q )
return R_BAD_QUESTION;
if ( ! a )
return R_BAD_ANSWER;
if ( q->cnt> a->cnt )
return R_NOT_MATCH;
/* Не слишком оптимальное решение. Продиктовано тем фактом, что порядок слов в ответе
может не совпадать с порядком слов в вопросе. */
for ( i = 0; i < q->cnt; ++i ){
for ( j = 0; j < a->cnt; ++j )
if ( ! strcmp((q->answ)[i], (a->answ)[j]) )
break;
if ( j == a->cnt )
return R_NOT_MATCH;
}
return R_OK;
}
void print_questions(const question_t * q){
printf("\n");
while ( q ){
printf("%s\n", q->qst);
q = q->next;
}
printf("\n");
}
int print_menu(void){
int ret;
printf("\n*** Menu ***\n");
printf("1 Show questions\n");
printf("2 Add question\n");
printf("3 Answer a question\n");
printf("0 Exit\n");
printf("> ");
if ( scanf("%d%*c", &ret) != 1 )
return -1;
return ret;
}
int main(void){
question_t *qHead, *qTail, *qFound, *dummy;
int menu;
result_t res;
qHead = NULL;
qTail = NULL;
dummy = NULL;
while ( menu = print_menu() ){
switch(menu){
case 1:
if ( ! qHead )
printf("No questions in base!\n");
else
print_questions(qHead);
break;
case 2:
if ( ( qTail = new_question(qTail) ) == NULL ){
printf("Can't add a question!\n");
delete_questions(qHead);
exit(1);
}
if ( ! qHead )
qHead = qTail;
break;
case 3:
if ( ! qHead ){
printf("No questions in base!\n");
break;
}
if ( ( dummy = new_question(NULL) ) == NULL ){
printf("Can't process question!\n");
delete_questions(qHead);
exit(1);
}
for ( qFound = qHead; qFound&&strcmp(qFound->qst, dummy->qst); qFound = qFound->next )
;
if ( ! qFound )
printf("Can't find question in base!\n");
el
#include
#include
typedef struct QUESTION {
char *qst;
char **answ;
int cnt;
struct QUESTION *next;
} question_t;
typedef enum RESULT {
R_OK = 0, R_NOT_MATCH = 1, R_BAD_QUESTION = 2, R_BAD_ANSWER = 3
} result_t;
question_t * new_question(question_t *last){
static char buf[BUFSIZ], *p;
question_t *q;
int i;
if ( ( q = (question_t *)malloc(sizeof(question_t)) ) == NULL ){
fprintf(stderr, "memory error!\n");
return NULL;
}
printf("Enter question:\n> ");
if ( ! fgets(buf, BUFSIZ, stdin) ){
fprintf(stderr, "Can't get string!\n");
free(q);
return NULL;
}
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ){
fprintf(stderr, "Empty string!\n");
free(q);
return NULL;
}
if ( ( q->qst = strdup(buf) ) == NULL ){
fprintf(stderr, "Memory error!\n");
free(q);
return NULL;
}
printf("Enter answers one by string with empty one at finish:\n");
q->cnt = 0;
q->answ = NULL;
while ( 1 ){
printf("> ");
if ( ! fgets(buf, BUFSIZ, stdin) ){
fprintf(stderr, "Can't get string!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
if ( p = strchr(buf, '\n') )
*p = '\0';
if( ! *buf )
break;
if (( q->answ = (char**)realloc(q->answ, sizeof(char*) * (q->cnt + 1)) ) == NULL ){
fprintf(stderr, "Memory error!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
if ( ( q->answ[q->cnt] = strdup(buf) ) == NULL ){
fprintf(stderr, "Memory error!\n");
if ( q->answ ){
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
}
free(q->qst);
free(q);
return NULL;
}
q->cnt += 1;
}
if ( ! q->answ ){
fprintf(stderr, "No answers given!\n");
free(q->qst);
free(q);
return NULL;
}
q->next = NULL;
if ( last )
last->next = q;
return q;
}
void delete_questions(question_t *q){
question_t *t;
int i;
while ( q ){
t = q->next;
for ( i = 0; i < q->cnt; ++i )
free(q->answ[i]);
free(q->answ);
free(q->qst);
free(q);
q = t;
}
}
RESULT check_answer(const question_t *q, const question_t *a){
int i, j;
if ( ! q )
return R_BAD_QUESTION;
if ( ! a )
return R_BAD_ANSWER;
if ( q->cnt> a->cnt )
return R_NOT_MATCH;
/* Не слишком оптимальное решение. Продиктовано тем фактом, что порядок слов в ответе
может не совпадать с порядком слов в вопросе. */
for ( i = 0; i < q->cnt; ++i ){
for ( j = 0; j < a->cnt; ++j )
if ( ! strcmp((q->answ)[i], (a->answ)[j]) )
break;
if ( j == a->cnt )
return R_NOT_MATCH;
}
return R_OK;
}
void print_questions(const question_t * q){
printf("\n");
while ( q ){
printf("%s\n", q->qst);
q = q->next;
}
printf("\n");
}
int print_menu(void){
int ret;
printf("\n*** Menu ***\n");
printf("1 Show questions\n");
printf("2 Add question\n");
printf("3 Answer a question\n");
printf("0 Exit\n");
printf("> ");
if ( scanf("%d%*c", &ret) != 1 )
return -1;
return ret;
}
int main(void){
question_t *qHead, *qTail, *qFound, *dummy;
int menu;
result_t res;
qHead = NULL;
qTail = NULL;
dummy = NULL;
while ( menu = print_menu() ){
switch(menu){
case 1:
if ( ! qHead )
printf("No questions in base!\n");
else
print_questions(qHead);
break;
case 2:
if ( ( qTail = new_question(qTail) ) == NULL ){
printf("Can't add a question!\n");
delete_questions(qHead);
exit(1);
}
if ( ! qHead )
qHead = qTail;
break;
case 3:
if ( ! qHead ){
printf("No questions in base!\n");
break;
}
if ( ( dummy = new_question(NULL) ) == NULL ){
printf("Can't process question!\n");
delete_questions(qHead);
exit(1);
}
for ( qFound = qHead; qFound&&strcmp(qFound->qst, dummy->qst); qFound = qFound->next )
;
if ( ! qFound )
printf("Can't find question in base!\n");
el
Похожие вопросы
- Как создать программу на языке c++
- Как создать неконсольную программу на языке c++
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Как создать программу, зная язык программирования?
- Написать программу на языке C, чтобы в нее вводили число, а она говорила простое оно или нет
- Программа на языке C++
- помогите переделать программу на язык C#.
- Программа на языке C++, помогите описать :|
- не могу создать программу на языке "си"
- Очень нужен текст программы на языке VBA