Browse Source
Merge branch 'Pascal' into 'main'
Merge branch 'Pascal' into 'main'
Pascal erster Merge Versuche 2 See merge request fdai7760/the-quizstars!7main
fdai7760
11 months ago
3 changed files with 322 additions and 0 deletions
-
200src/timequiz.c
-
4src/timequiz.h
-
118test/test_timequiz.c
@ -0,0 +1,200 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <time.h> |
||||
|
#include <string.h> |
||||
|
#include "timequiz.h" |
||||
|
|
||||
|
void timequiz(); |
||||
|
|
||||
|
int getRandomQuestionIndex(int askedQuestions[], int totalQuestions); |
||||
|
|
||||
|
void displayQuestion(char* question, char* answers[], int correctIndex); |
||||
|
|
||||
|
void processUserAnswer(int userAnswer, int correctIndex, int* score, int* totalCorrectAnswers, char* answers[]); |
||||
|
|
||||
|
int isValidAnswer(int userAnswer); |
||||
|
|
||||
|
void timequiz() { |
||||
|
|
||||
|
printf("Welcome to our Time Quiz!\n"); |
||||
|
printf("You have 60 seconds to answer the questions. Have fun!\n"); |
||||
|
|
||||
|
char* questions[] = { |
||||
|
"What is the capital of France?", |
||||
|
"Who developed the theory of relativity?", |
||||
|
"Who was the first President of the United States?", |
||||
|
"What is the chemical symbol for water?", |
||||
|
"Who wrote 'To Kill a Mockingbird'?", |
||||
|
"What is the largest planet in our solar system?", |
||||
|
"Who painted the Mona Lisa?", |
||||
|
"What is the tallest mountain in the world?", |
||||
|
"Which country is known as the Land of the Rising Sun?", |
||||
|
"Who was the first person to walk on the moon?", |
||||
|
"What year did World War I begin?", |
||||
|
"What is the currency of Japan?", |
||||
|
"Who is known as the 'Father of Computers'?", |
||||
|
"What is the capital of Canada?", |
||||
|
"Who discovered penicillin?", |
||||
|
"What is the chemical formula for table salt?", |
||||
|
"Which is the largest ocean on Earth?", |
||||
|
"Who is the author of '1984'?", |
||||
|
"What is the main ingredient in guacamole?", |
||||
|
"Who was the Greek god of the sea?", |
||||
|
"What is the square root of 144?", |
||||
|
"Who wrote 'Romeo and Juliet'?", |
||||
|
"What is the process by which plants make their food?", |
||||
|
"What is the boiling point of water in Celsius?", |
||||
|
"Who painted 'Starry Night'?", |
||||
|
"What is the chemical symbol for gold?", |
||||
|
"Which planet is known as the Red Planet?", |
||||
|
"Who invented the telephone?", |
||||
|
"What is the capital of Brazil?", |
||||
|
"What is the hardest natural substance on Earth?", |
||||
|
"Who was the first woman to win a Nobel Prize?", |
||||
|
"Who composed 'The Four Seasons'?", |
||||
|
"What is the largest mammal in the world?", |
||||
|
"What is the study of earthquakes called?", |
||||
|
"Who wrote 'Hamlet'?", |
||||
|
"What is the smallest prime number?", |
||||
|
"Who is known as the 'Queen of Pop'?", |
||||
|
"What is the chemical symbol for oxygen?", |
||||
|
"What is the capital of Australia?" |
||||
|
}; |
||||
|
|
||||
|
char* answers[][4] = { |
||||
|
{"Paris", "London", "Berlin", "Madrid"}, |
||||
|
{"Albert Einstein", "Isaac Newton", "Galileo Galilei", "Stephen Hawking"}, |
||||
|
{"George Washington", "Thomas Jefferson", "John Adams", "James Madison"}, |
||||
|
{"H2O", "CO2", "NaCl", "C6H12O6"}, |
||||
|
{"Harper Lee", "J.K. Rowling", "Ernest Hemingway", "George Orwell"}, |
||||
|
{"Jupiter", "Saturn", "Mars", "Neptune"}, |
||||
|
{"Leonardo da Vinci", "Michelangelo", "Pablo Picasso", "Vincent van Gogh"}, |
||||
|
{"Mount Everest", "K2", "Kangchenjunga", "Lhotse"}, |
||||
|
{"Japan", "China", "South Korea", "India"}, |
||||
|
{"Neil Armstrong", "Buzz Aldrin", "Yuri Gagarin", "Alan Shepard"}, |
||||
|
{"1914", "1918", "1923", "1939"}, |
||||
|
{"Yen", "Euro", "Dollar", "Pound"}, |
||||
|
{"Charles Babbage", "Alan Turing", "Ada Lovelace", "Bill Gates"}, |
||||
|
{"Ottawa", "Toronto", "Vancouver", "Montreal"}, |
||||
|
{"Alexander Fleming", "Louis Pasteur", "Marie Curie", "Albert Einstein"}, |
||||
|
{"NaCl", "H2O", "CO2", "HCl"}, |
||||
|
{"Pacific Ocean", "Atlantic Ocean", "Indian Ocean", "Arctic Ocean"}, |
||||
|
{"George Orwell", "F. Scott Fitzgerald", "Aldous Huxley", "J.D. Salinger"}, |
||||
|
{"Avocado", "Tomato", "Onion", "Lime"}, |
||||
|
{"Poseidon", "Zeus", "Hades", "Apollo"}, |
||||
|
{"12", "10", "16", "14"}, |
||||
|
{"William Shakespeare", "Jane Austen", "Emily Bronte", "Leo Tolstoy"}, |
||||
|
{"Photosynthesis", "Respiration", "Fermentation", "Transpiration"}, |
||||
|
{"100", "0", "212", "50"}, |
||||
|
{"Vincent van Gogh", "Pablo Picasso", "Leonardo da Vinci", "Claude Monet"}, |
||||
|
{"Au", "Ag", "Hg", "Fe"}, |
||||
|
{"Mars", "Jupiter", "Venus", "Mercury"}, |
||||
|
{"Alexander Graham Bell", "Thomas Edison", "Nikola Tesla", "Galileo Galilei"}, |
||||
|
{"Brasília", "Rio de Janeiro", "São Paulo", "Buenos Aires"}, |
||||
|
{"Diamond", "Quartz", "Graphite", "Topaz"}, |
||||
|
{"Marie Curie", "Rosalind Franklin", "Mother Teresa", "Malala Yousafzai"}, |
||||
|
{"299,792,458 meters per second", "300,000,000 meters per second", "200,000,000 meters per second", "150,000,000 meters per second"}, |
||||
|
{"Antonio Vivaldi", "Wolfgang Amadeus Mozart", "Ludwig van Beethoven", "Johann Sebastian Bach"}, |
||||
|
{"Blue whale", "African elephant", "Giraffe", "Polar bear"}, |
||||
|
{"Seismology", "Meteorology", "Geology", "Astronomy"}, |
||||
|
{"William Shakespeare", "Charles Dickens", "Jane Austen", "Mark Twain"}, |
||||
|
{"2", "3", "5", "7"}, |
||||
|
{"Madonna", "Beyoncé", "Lady Gaga", "Taylor Swift"}, |
||||
|
{"O", "Co", "O2", "O3"}, |
||||
|
{"Canberra", "Sydney", "Melbourne", "Perth"} |
||||
|
}; |
||||
|
|
||||
|
int correctAnswers[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; |
||||
|
|
||||
|
for (int i = 0; i < sizeof(questions) / sizeof(questions[0]); i++) { |
||||
|
int j = rand() % 4; |
||||
|
char* temp = answers[i][0]; |
||||
|
answers[i][0] = answers[i][j]; |
||||
|
answers[i][j] = temp; |
||||
|
|
||||
|
if (j == 0) { |
||||
|
correctAnswers[i] = 1; |
||||
|
} |
||||
|
else if (j == 1) { |
||||
|
correctAnswers[i] = 2; |
||||
|
} |
||||
|
else if (j == 2) { |
||||
|
correctAnswers[i] = 3; |
||||
|
} |
||||
|
else { |
||||
|
correctAnswers[i] = 4; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int score = 0; |
||||
|
int totalAnsweredQuestions = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
time_t startTime = time(NULL); |
||||
|
time_t currentTime; |
||||
|
int elapsedTime = 0; |
||||
|
int totalQuestions = sizeof(questions) / sizeof(questions[0]); |
||||
|
int askedQuestions[40]; |
||||
|
|
||||
|
memset(askedQuestions, 0, sizeof(askedQuestions)); |
||||
|
srand((unsigned int)time(NULL)); |
||||
|
|
||||
|
while (elapsedTime < 60 && totalAnsweredQuestions < totalQuestions) { |
||||
|
int questionIndex = getRandomQuestionIndex(askedQuestions, totalQuestions); |
||||
|
askedQuestions[questionIndex] = 1; |
||||
|
|
||||
|
int correctIndex = correctAnswers[questionIndex] - 1; |
||||
|
|
||||
|
displayQuestion(questions[questionIndex], answers[questionIndex], correctIndex); |
||||
|
|
||||
|
int userAnswer; |
||||
|
printf("Answer (1-4): "); |
||||
|
scanf_s("%d", &userAnswer); |
||||
|
|
||||
|
while (!isValidAnswer(userAnswer)) { |
||||
|
printf("Invalid input. Please enter a number between 1 and 4: "); |
||||
|
scanf_s("%d", &userAnswer); |
||||
|
} |
||||
|
|
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers[questionIndex]); |
||||
|
|
||||
|
totalAnsweredQuestions++; |
||||
|
currentTime = time(NULL); |
||||
|
elapsedTime = (int)difftime(currentTime, startTime); |
||||
|
} |
||||
|
|
||||
|
printf("\nQuiz finished!\n"); |
||||
|
printf("Your total score: %d out of %d\n", totalCorrectAnswers, totalAnsweredQuestions); |
||||
|
} |
||||
|
|
||||
|
int getRandomQuestionIndex(int askedQuestions[], int totalQuestions) { |
||||
|
int questionIndex; |
||||
|
do { |
||||
|
questionIndex = rand() % totalQuestions; |
||||
|
} while (askedQuestions[questionIndex] == 1); |
||||
|
return questionIndex; |
||||
|
} |
||||
|
|
||||
|
void displayQuestion(char* question, char* answers[], int correctIndex) { |
||||
|
printf("\nQuestion: %s\n", question); |
||||
|
for (int i = 0; i < 4; i++) { |
||||
|
printf("%d. %s\n", i + 1, answers[i]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void processUserAnswer(int userAnswer, int correctIndex, int* score, int* totalCorrectAnswers, char* answers[]) { |
||||
|
if (userAnswer == correctIndex + 1) { |
||||
|
printf("Correct!\n"); |
||||
|
(*score)++; |
||||
|
(*totalCorrectAnswers)++; |
||||
|
} |
||||
|
else { |
||||
|
printf("Wrong! The correct answer is: %d. %s\n", correctIndex + 1, answers[correctIndex]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int isValidAnswer(int userAnswer) { |
||||
|
return (userAnswer >= 1 && userAnswer <= 4); |
||||
|
} |
@ -0,0 +1,118 @@ |
|||||
|
#ifdef TEST |
||||
|
|
||||
|
#include "unity.h" |
||||
|
#include "timequiz.h" |
||||
|
|
||||
|
void setUp(void) { |
||||
|
} |
||||
|
|
||||
|
void tearDown(void) { |
||||
|
} |
||||
|
|
||||
|
void test_getRandomQuestionIndex(void) { |
||||
|
int askedQuestions[10] = {0}; |
||||
|
int totalQuestions = 10; |
||||
|
int index = getRandomQuestionIndex(askedQuestions, totalQuestions); |
||||
|
TEST_ASSERT_TRUE(index >= 0 && index < totalQuestions); |
||||
|
} |
||||
|
|
||||
|
void test_displayQuestion(void) { |
||||
|
char* question = "Test Question"; |
||||
|
char* answers[] = {"A", "B", "C", "D"}; |
||||
|
int correctIndex = 0; |
||||
|
printf("\nExpected Output:\n"); |
||||
|
printf("Question: %s\n", question); |
||||
|
for (int i = 0; i < 4; i++) { |
||||
|
printf("%d. %s\n", i + 1, answers[i]); |
||||
|
} |
||||
|
printf("\n"); |
||||
|
printf("Actual Output:\n"); |
||||
|
displayQuestion(question, answers, correctIndex); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_correct(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 0; |
||||
|
int userAnswer = 1; |
||||
|
|
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(1, score); |
||||
|
TEST_ASSERT_EQUAL_INT(1, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_wrong(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 0; |
||||
|
int userAnswer = 2; // Assuming user selects the second option |
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(0, score); |
||||
|
TEST_ASSERT_EQUAL_INT(0, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_correctAnswer_index3(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"A", "B", "C", "D"}; |
||||
|
processUserAnswer(4, 3, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(1, score); |
||||
|
TEST_ASSERT_EQUAL_INT(1, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_correctAnswer_index0(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"A", "B", "C", "D"}; |
||||
|
processUserAnswer(1, 0, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(1, score); |
||||
|
TEST_ASSERT_EQUAL_INT(1, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_wrongAnswer_index3(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 0; |
||||
|
int userAnswer = 4; // Assuming user selects the fourth option |
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(0, score); |
||||
|
TEST_ASSERT_EQUAL_INT(0, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_correctAnswer_index1(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 1; |
||||
|
int userAnswer = 2; // Assuming user selects the second option |
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(1, score); |
||||
|
TEST_ASSERT_EQUAL_INT(1, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_correctAnswer_index2(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 2; |
||||
|
int userAnswer = 3; // Assuming user selects the third option |
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(1, score); |
||||
|
TEST_ASSERT_EQUAL_INT(1, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
void test_processUserAnswer_wrongAnswer_index1(void) { |
||||
|
int score = 0; |
||||
|
int totalCorrectAnswers = 0; |
||||
|
char* answers[] = {"Paris", "London", "Berlin", "Madrid"}; |
||||
|
int correctIndex = 2; |
||||
|
int userAnswer = 2; // Assuming user selects the second option |
||||
|
processUserAnswer(userAnswer, correctIndex, &score, &totalCorrectAnswers, answers); |
||||
|
TEST_ASSERT_EQUAL_INT(0, score); |
||||
|
TEST_ASSERT_EQUAL_INT(0, totalCorrectAnswers); |
||||
|
} |
||||
|
|
||||
|
#endif //TEST |
Write
Preview
Loading…
Cancel
Save
Reference in new issue