Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2009, 01:41   #1
М@лышка
Пользователь
 
Регистрация: 05.06.2009
Сообщений: 13
По умолчанию С++ Прокоментировать программу

Здравствуйте. Помогите прокоментировать програмку. Я там знаки вопроса поставила где непонятно. Заранее спасибо. Вот ее код:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>

enum Suits{Spades,Clubs,Diamonds,Hearts};
enum Values{Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace};
struct Card
{
 int Suit;
 int Value;
};

int Kick(Card C1, Card C2, int Cs)
{
        if(C1.Suit!=C2.Suit)
        {
                if(C1.Suit == Cs)
                {
                        return 1;
                }
                if(C2.Suit == Cs)
                {
                        return 0;
                }
                cout << "Карты разной масти!!! Ни одна из них не козырная!";
                return 0;
        }
        if(C1.Value>C2.Value) return 1;
        return 0;
}

int GetSuit(char * str)
{
        char buff[15];
        int i =0;
        char names[4][15]={"Spades","Clubs","Diamonds","Hearts"};
        printf(str);
        printf("\n");
        printf("Введите масть(Spades,Clubs,Diamonds,Hearts):\n");
        do{
                scanf("%15s",buff);
                i = 0;
                do{
                        if(strcmp(names[i],buff)==0) //???
                                break;
                        i++;
                }while(i<4);
                if(i != 4)
                        break;
                printf("Такой масти нет. Повторите ввод!\n");
        }while(i == 4);
        return i;
}

int GetValue(char * str)
{
        char names[9][15]={"Six","Seven","Eight","Nine","Ten","Jack","Queen","King”,”Ace”};
        char buff[15];
        int i = 0;
        printf(str);
        printf("\n");
        printf("Введите достоинство карты(Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace);

        do{
                i = 0;
                scanf("%15s",buff);
                do{
                        if(strcmp(names[i],buff)==0)
                                break;
                        i++;
                }while(i<9);
                if(i != 9)
                        break;
                printf("Такого достоинства нет. Повторите ввод!\n");
        }while(i == 9);
        return i;
}

void GetCard(Card * c, char * str) 
{
        c->Suit = GetSuit(str);  //???
        c->Value = GetValue(str);  //???
};

void main()
{

        Card C1,C2;
        GetCard(&C1, "Первая карта");
        GetCard(&C2, "Вторая карта");

        int t = GetSuit("Козырная масть");
        if(Kick(C1,C2,t))
                cout << "Первая карта бьет вторую!" << endl;
        else
                cout << "Вторая карта бьет первую!" << endl;
        getch();
}
М@лышка вне форума Ответить с цитированием
Старый 05.06.2009, 02:06   #2
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>

enum Suits{Spades,Clubs,Diamonds,Hearts};
enum Values{Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace};
struct Card
{
 int Suit;
 int Value;
};

int Kick(Card C1, Card C2, int Cs)
{
        if(C1.Suit!=C2.Suit)
        {
                if(C1.Suit == Cs)
                {
                        return 1;
                }
                if(C2.Suit == Cs)
                {
                        return 0;
                }
                cout << "Карты разной масти!!! Ни одна из них не козырная!";
                return 0;
        }
        if(C1.Value>C2.Value) return 1;
        return 0;
}

int GetSuit(char * str)
{
        char buff[15];
        int i =0;
        char names[4][15]={"Spades","Clubs","Diamonds","Hearts"};
        printf(str);
        printf("\n");
        printf("Введите масть(Spades,Clubs,Diamonds,Hearts):\n");
        do{
                scanf("%15s",buff);
                i = 0;
                do{
                        if(strcmp(names[i],buff)==0) //Сравнение строк
                                break;
                        i++;
                }while(i<4);
                if(i != 4)
                        break;
                printf("Такой масти нет. Повторите ввод!\n");
        }while(i == 4);
        return i;
}

int GetValue(char * str)
{
        char names[9][15]={"Six","Seven","Eight","Nine","Ten","Jack","Queen","King”,”Ace”};
        char buff[15];
        int i = 0;
        printf(str);
        printf("\n");
        printf("Введите достоинство карты(Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace);

        do{
                i = 0;
                scanf("%15s",buff);
                do{
                        if(strcmp(names[i],buff)==0)
                                break;
                        i++;
                }while(i<9);
                if(i != 9)
                        break;
                printf("Такого достоинства нет. Повторите ввод!\n");
        }while(i == 9);
        return i;
}

void GetCard(Card * c, char * str) 
{
        c->Suit = GetSuit(str);  //Вызываем функцию GetSuit
        c->Value = GetValue(str);  //Вызываем функцию GetValue
};

void main()
{

        Card C1,C2;
        GetCard(&C1, "Первая карта");
        GetCard(&C2, "Вторая карта");

        int t = GetSuit("Козырная масть");
        if(Kick(C1,C2,t))
                cout << "Первая карта бьет вторую!" << endl;
        else
                cout << "Вторая карта бьет первую!" << endl;
        getch();
}

Последний раз редактировалось Evgeniy26; 05.06.2009 в 02:49.
Evgeniy26 вне форума Ответить с цитированием
Старый 05.06.2009, 02:11   #3
М@лышка
Пользователь
 
Регистрация: 05.06.2009
Сообщений: 13
По умолчанию

Ну это-то я понимаю))) Что означает strcmp и c->Suit ???
М@лышка вне форума Ответить с цитированием
Старый 05.06.2009, 02:30   #4
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

strcmp - двоично безопасное сравнение строк.
c->Suit - это обозначает что переменной Suit принадлежащей объекту с присваивается результат вызова функции GetSuit(str).
Для доступа к чиленам структуры через указатель на объект используется оператор ->

Последний раз редактировалось Evgeniy26; 05.06.2009 в 02:38.
Evgeniy26 вне форума Ответить с цитированием
Старый 05.06.2009, 02:39   #5
М@лышка
Пользователь
 
Регистрация: 05.06.2009
Сообщений: 13
По умолчанию

Оу... Спасибо, а можно поподробнее про
Цитата:
strcmp - двоично безопасное сравнение строк
А то я что-то не совсем поняла...(((
М@лышка вне форума Ответить с цитированием
Старый 05.06.2009, 02:48   #6
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

strcmp(str1, str2) - выполняет сравнение двух строк, возвращая целое число.
меньше нуля: str1 < str2
нуль: str1 = str2
больше нуля: str > str2
Evgeniy26 вне форума Ответить с цитированием
Старый 05.06.2009, 02:56   #7
М@лышка
Пользователь
 
Регистрация: 05.06.2009
Сообщений: 13
По умолчанию

Спасибочки))) Вот нашла еще на форуме задачку похожую на мою))) Не могли бы Вы и в ней объяснить пару моментов. Вот выложу код сюда:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
        int i,j,m,n;
        float **Mas;
        FILE *F;

        printf("Введите количество строк матрицы ");
        scanf("%d",&m); // что такое &?
        printf("Введите количество столбцов матрицы ");
        scanf("%d",&n);
        while (m<=1)
          {
            printf("Ошибка!!! Неверно введено количество строк матрицы");
            printf("\nПовторите ввод...");
            scanf("%d",m);
          }
        while (n<=1)
          {
            printf("Ошибка!!! Неверно введено количество столбцов матрицы");
            printf("\nПовторите ввод...");
            scanf("%d",n);
          }
        Mas=(float**)malloc(m*sizeof(float*));
        for (i=0; i<n; i++)
          Mas[i]=(float*)malloc(n*sizeof(float));
       
        for (i=0; i<m; i++)
          for (j=0; j<n; j++)
            {
              printf("\nВведите элемент матрицы [%d,%d]:",i,j);
              scanf("%f",&Mas[i][j]);
            }
            
        printf("\nИсходная матрица имеет вид:"); 
        for(i=0; i<m; i++)
          {
            for(j=0; j<n;j++)
            printf("%3.0f ", Mas[i][j]);
           printf("\n");
          }
          
        for (i=0; i<m; i++)
          {
            for (j=1; j<n; j++)
              {
                if (Mas[i][j-1]*Mas[i][j]>=0) //???
                  {
                    break;
                  }
                if (j==n-1)  //???
                  {
                    printf("\nВ %d строке матрицы, знаки элементов чередуются:",i);
                  }
               }
          }
          for(i=0; i<m; i++)
           free(Mas[i]);
          free(Mas); 
          getch();
}
М@лышка вне форума Ответить с цитированием
Старый 05.06.2009, 03:07   #8
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

&а - & передает ссылку переменной а в scanf что бы записать в нее значение считанное из потока.
Mas[i][j-1]*Mas[i][j] - перемножение значений массива.

Последний раз редактировалось Evgeniy26; 05.06.2009 в 03:15.
Evgeniy26 вне форума Ответить с цитированием
Старый 05.06.2009, 03:20   #9
М@лышка
Пользователь
 
Регистрация: 05.06.2009
Сообщений: 13
По умолчанию

Спасибо, а вот только последнее
Код:
if (j==n-1)
что это значит?
М@лышка вне форума Ответить с цитированием
Старый 05.06.2009, 03:24   #10
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Код:
 if (j==n-1)
Проверка на раветство. Если j = n-1 что то выполняем.
Evgeniy26 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
приконектить программу Анастасия123456789 Помощь студентам 1 09.04.2009 12:10
Защитить программу. С.М.С Безопасность, Шифрование 10 23.02.2009 00:35
Напишу программу alex-v Фриланс 3 05.09.2007 14:10