Operating Systems 2021F: Assignment 1

From Soma-notes
Revision as of 10:07, 23 September 2021 by Soma (talk | contribs)
Jump to navigation Jump to search

This assignment is still being developed.

Please submit the answers to the following questions via Brightspace by October 1, 2021. There are 20 points in ?? questions.

Submit your answers as a plain text file following this template. Your answers will be parsed by a script in order to help with grading so please preserve the format of the template. No other formats will be accepted.

Don't forget to include what outside resources you used to complete each of your answers, including other students, man pages, and web resources. You do not need to list help from the instructor, TA, or information found in the textbook.

Questions

  1. [2] By default, what answers will give you a perfect score in 3000quiz? Why?
  2. [2] How is the second question in 3000quiz represented in assembly language? How does this compare to the string on line 57, in main()?
  3. [2] In what section of the 3000quiz binary are the questions stored? How did you get this information?
  4. [2] How can you remove the constant numQuestions and replace it with a runtime calculated count of the number of questions? Does anything in the answers data structure help with this calculation? Explain briefly.
  5. [2] How can you change 3000quiz so that if you run "./3000quiz Sally" the answer to question 4 is Sally? Only change the data passed to askQuestions(), don't change the code in askQuestions(). Can you do this without copying the string? Explain briefly.
  6. [2] How can you change 3000quiz so that if you set the environment variable DOGNAME to Anil's dog's name the answer to question 2 will be correct? (Again, just change the data passed to askQuestions(), not the code of askQuestions().) Can you do this without copying the string? Explain briefly.

Code

3000quiz.c

/* 3000quiz.c */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

char * the_questions[] = {
        "What is the capitol of Canada?",
        "What is the name of Anil's dog?",
        "How many feet in a mile?",
        "What is your name?",
        NULL
};

char * the_answers[] = {
        "Ottawa",
        "ENV: DOGNAME",
        "5280",
        "Bob",
        NULL
};

int askQuestions(char **question, char *answer[],
                 char *argv[], char *envp[])
{
        int score = 0;
        int q = 0;
        int c;
        int res;
        char response[100];
        
        while (question[q] && answer[q]) {
                printf("%s ", question[q]);
                c = scanf("%100s", response);
                if (c != EOF) {
                        if (strcmp(answer[q], response) == 0) {
                                printf("Correct!\n");
                                score++;
                        } else {
                                printf("Sorry, the answer is %s.\n", answer[q]);
                        }
                }
                q++;
        }
        
        return score;
}

int main(int argc, char *argv[], char *envp[])
{
        int score;
        int numQuestions = 4;

        score = askQuestions(the_questions, the_answers, argv, envp);

        printf("\nYour score is %d out of %d.\n", score, numQuestions);

        return 0;
}