Notes for Tuesday 5 April

  • Meeting 20
  • Quiz 6

Pass by reference (the C++ way).

We skipped Quiz 6.

1 Solution to Blackjack assignment

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int deal_a_card();
int rank_to_score(int rank);

int main5()
{
        int c1, c2, c3, score;
        srand(time(NULL));
        c1 = deal_a_card();
        c2 = deal_a_card();
        c3 = deal_a_card();
        score = rank_to_score (c1)
                        + rank_to_score(c2)
                        + rank_to_score(c3);
        if( (c1 == 1 || c2 == 1 || c3 == 1)
                && score <= 11 )
        {
                printf("One ace counted high.\n");
                score += 10; // one ace goes high
        }
        printf("Your score is %d\n", score);
        if( score > 21 )
        {
                printf("You LOSE.\n");
        }
        return 0;
}

int deal_a_card()
{
        int rank = rand()%13+1;
        int suit = rand()%4;
        
        switch (rank)
        {
                case 1:  printf("Ace");   break;
                case 11: printf("Jack");  break;
                case 12: printf("Queen"); break;
                case 13: printf("King");  break;
                default:
                        printf("%d", rank);
                        break;
        }
        switch (suit)
        {
                case 0: printf(" Of Diamonds"); break;
                case 1: printf(" Of Hearts");   break;
                case 2: printf(" Of Spades");   break;
                case 3: printf(" Of Clubs");    break;
        }
        printf("\n");
        return rank;
}

int rank_to_score (int rank)
{
        switch (rank) 
        {
                case 11:
                case 12:
                case 13:
                        return 10;
                default:
                        return rank;
        }       
}

2 Example with reference parameters

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// these are REFERENCE parameters, AKA
// "in-out" parameters. They get bound
// to the variables provided at the call.
void deal_card(int& rank, int& suit)
{
        rank = rand()%13+1;
        suit = rand()%4;
        switch (rank)
        {
                case 1:  printf("Ace");   break;
                case 11: printf("Jack");  break;
                case 12: printf("Queen"); break;
                case 13: printf("King");  break;
                default:
                        printf("%d", rank);
                        break;
        }
        switch (suit)
        {
                case 0: printf(" Of Diamonds"); break;
                case 1: printf(" Of Hearts");   break;
                case 2: printf(" Of Spades");   break;
                case 3: printf(" Of Clubs");    break;
        }
        printf("\n");
}

int main()
{
        int r1, s1, r2, s2;
        srand(time(NULL));
        deal_card(r1, s1);
        deal_card(r2, s2);
        //deal_card(5, 2); // ERROR
        if(s1 == s2) 
        {
                printf("FLUSH\n");
        }
        else if(r1 == r2)
        {
                printf("PAIR\n");
        }
        else
        {
                printf("Nothing.\n");
        }
        return 0;
}