С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 12

Задача по теме классы "про карты", если все 5 карт одной масти, то выдать «Флеш», в противном – сдать еще 5 карт

23.01.2012, 18:43. Показов 2393. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток) Пишу прогу по теме Классы, дописав до определенного места столкнулся с ошибками, но не могу понять в чем именно, подскажите пожалуйста в чем ошибка, заранее спасибо) Ниже приведу условие, код, и выводимые сообщения об ошибках

Условие:
Из колоды карт (52 шт.) сдают по 5 карт из перетасованной колоды. Если все 5 карт одной масти, то выдать «Флеш», в противном – сдать еще 5 карт. После сдачи 50 карт, если нет флеша, выдать «Нет флеша». Спроектировать необходимые классы и составить тестирующую процедуру.


Код:
Код созданного класса Koloda (рандомно без повторений забивается в конструкторе 52 значения, затем просматриваю в методе Flash каждые 5 элементов и в зависимости от диапазона(разбил: 1-13 - червы, 14-25 -... ит.д.) увеличиваю счетчик масти, если счетчик=5 то флэш, вот только не могу вывести сообщение то что флэш или нет флеша) и еще не могу вывести сам массив cards в методе public override string ToString() или я что не так делаю и вывожу не в том месте?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    public class Koloda
    {
        private int[] cards;
 
        public Koloda()
        {
            int[] cards = new int[52];
            Random rand = new Random((int)DateTime.Now.Ticks);
            for (int i = 0; i < cards.Length; i++)
            {
                int j = rand.Next(1, 53);
                if (!cards.Contains<int>(j))
                    cards[i] = j;
                else i--;
            }
        }
        
 
        public int[] Cards
        {
            
            
            set
            {
                cards = value;
            }
        }
 
        public string Flash()
        {
            
                string res; 
                int h=0,s=0,c=0,d=0,n=5,i=0,iter=0;
                m:
                for (int j = i; j < n; j++)
                {
                    if ((cards[j] > 0) && (cards[j] < 14)) h++;
                    if ((cards[j] > 13) && (cards[j] < 27)) s++;
                    if ((cards[j] > 26) && (cards[j] < 39)) c++;
                    if ((cards[j] > 38) && (cards[j] < 53)) d++;
                }
                if ((h == 5) || (s == 5) || (c == 5) || (d == 5))
                { Console.WriteLine("Flash"); res = "Flash"; goto end; }
 
                if (iter < 10) { iter++; i = i + 5; n = n + 5; goto m; } else { Console.WriteLine("Нет флэша"); res = "There is no Flash"; }
                end:
                return res;   <<<<<<<<<<<<<<<<<<<<------------ ПЫТАЮСЬ ВЫВЕСТИ    RES     ТАК
                Console.WriteLine(res);<<<<<<<<<<<<<-----------  И ТАК    - НЕ ПОЛУЧАЕТСЯ
                   
        }
        public override string ToString()
        {
            string s = "";
            s += "Колода карт перетасована";
            for (int j = 0; j < cards.Length; j++)     
            s += Convert.ToString(cards[j]);    <<<<<<<<<<<<<<<<<ТОЖЕ НЕ ВЫВОДИТ
            s += "\n";
 
            return s;
        }
 
    }
}
Код класса для тестирования:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    public class Test
    {
        public void Testing()
        {
            Koloda k=new Koloda();
            Console.WriteLine(k);
            
            
        }
    }
}

Код программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Test t = new Test();
            t.Testing();
        }
    }
}



Выскакивают ошибки:
Необработанное исключение: System.NullReferenceException: Ссылка на объект не ук
азывает на экземпляр объекта.
в ConsoleApplication2.Koloda.ToString() в H:\Projects\6 кр\ConsoleApplication
2\ConsoleApplication2\Koloda.cs:строка 62
в System.IO.TextWriter.WriteLine(Object value)
в System.IO.TextWriter.SyncTextWriter.Writ eLine(Object value)
в System.Console.WriteLine(Object value)
в ConsoleApplication2.Test.Testing() в H:\Projects\6 кр\ConsoleApplication2\C
onsoleApplication2\Test.cs:строка 13
в ConsoleApplication2.Program.Main(String[] args) в H:\Projects\6 кр\ConsoleA
pplication2\ConsoleApplication2\Program. cs:строка 13
Для продолжения нажмите любую клавишу . . .
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2012, 18:43
Ответы с готовыми решениями:

Каким числом способов можно выбрать 5 карт так, чтобы среди них оказались все карты одной масти?
Доброго времени суток!Помогите решть задачу, а то я дуб-дубом в комбинаторике. Условие: Имеется колода из 4n карт четырёх мастей, по n...

Каким количеством способов из колоды(36) карт можно выбрать неупорядоченный набор 5 карт, так, чтобы в этом наборе было 2 карты чёрной масти, 2 дамы
Каким количеством способов из колоды(36) карт можно выбрать неупорядоченный набор 5 карт, так, чтобы в этом наборе было 2 карты чёрной...

Сколькими способами из колоды в 52 карты можно вытащить 5 карт, что бы 3 из них были одной масти
Вопрос в теме. Подскажите пожалуйста.

2
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
23.01.2012, 21:44
Цитата Сообщение от IVN2012 Посмотреть сообщение
Необработанное исключение: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Переменная cards равна null, так как правильно надо было написать эту строку:
C#
1
int[] cards = new int[52];
Правильный вариант (:
C#
1
cards = new int[52];


И вообще, глядя на такую архитектуру - мне плохо становится. Да и класс Test нафиг вообще не нужен.
Мой вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Linq;
using System.Text;
 
class Program
{
    static void Main()
    {
        Deck deck = new Deck();
        deck.Shuffle();
        Card[] cards = deck.TakeCards(5);
        Console.WriteLine("Flash: {0}", Deck.IsFlash(cards));
        foreach (Card card in cards)
            Console.WriteLine(card);
    }
}
 
enum Suit
{
    Hearts, Diamonds, Clubs, Spades
}
 
enum Rank
{
    Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace
}
 
struct Card
{
    public Suit Suit;
    public Rank Rank;
 
    public Card(Suit suit, Rank rank)
    {
        Suit = suit;
        Rank = rank;
    }
 
    public override string ToString()
    {
        return string.Format("{0} {1}", Rank, Suit);
    }
}
 
class Deck
{
    private Card[] cards;
 
    public Deck()
    {
        int countSuits = Enum.GetNames(typeof(Suit)).Length;
        int countRanks = Enum.GetNames(typeof(Rank)).Length;
        cards = new Card[countSuits * countRanks];
        for (int i = 0; i < countSuits; i++)
            for (int j = 0; j < countRanks; j++)
                cards[i * countRanks + j] = new Card((Suit)i, (Rank)j);
    }
 
    public int Count
    {
        get { return cards.Length; }
    }
 
    public Card this[int index]
    {
        get { return cards[index]; }
        set { cards[index] = value; }
    }
 
    public void Shuffle()
    {
        cards = cards.OrderBy(e => Guid.NewGuid()).ToArray();
    }
 
    public Card[] TakeCards(int count)
    {
        if (Count < count)
            throw new ArgumentException(string.Format("The deck cards less than {0}.", count), "count");
        Card[] result = cards.Take(count).ToArray();
        cards = cards.Except(result).ToArray();
        return result;
    }
 
    public static bool IsFlash(Card[] cards)
    {
        if (cards.Length != 5)
            throw new ArgumentException("The array should consist of five cards.", "cards");
        return cards.Where(x => x.Suit == cards[0].Suit).Count() == 5;
    }
 
    public override string ToString()
    {
        StringBuilder result = new StringBuilder();
        result.AppendLine("A deck of cards:");
        foreach (Card card in cards)
            result.AppendLine(card.ToString());
        return result.ToString();
    }
}


P.S. Это я к тому, что код должен быть гибким и легко используемым.
3
0 / 0 / 1
Регистрация: 17.01.2012
Сообщений: 12
24.01.2012, 17:16  [ТС]
Большое спасибо за правильный вариант строки - исправил теперь работает, архитектура соглашусь - корявая, ваш вариант рациональней
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2012, 17:16
Помогаю со студенческими работами здесь

Массив, имитирующий колоду карт. Тасовка. Возвращение, если идут подряд 3 карты одинаковой масти
Определить массив, имитирующий колоду карт. Написать процедуру и функцию, которая тасует карты и возвращает false, если есть 3 подряд...

Какова вероятность того что у одного из игроков будут все 13 карт одной масти?
Между 4 игроками поровну распределили 52 карты (каждому по 13). Какова вероятность того что у одного из игроков будут все 13 карт одной...

Из колоды карт(52) выбрать по 2 карты каждой масти
Из колоды карт(52) выбрать по 2 карты каждой масти Я рассуждал так: первую карту можно брать любую, т.е. {C}_{52}^{1}, вторую уже...

Сколькими способами из колоды в 36 карт можно выбрать 5 карт, так чтобы было туз,валет, карта красной масти
Всем привет!!! выручайте, не могу решить задачу!!! сколькими способами из колоды в 36 карт можно выбрать 5 карт, так чтобы был: 1 туз,1...

Из колоды карт (52) вынимают три. Найти вероятность что среди вынутых карт есть хотя бы одна красной масти.
Из колоды карт (52) вынимают три. Найти вероятность что среди вынутых карт есть хотя бы одна красной масти. выручайте котятки)))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru