Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815

Считать последовательность игральных карт и занести их в массив множеств

17.07.2014, 15:38. Показов 1899. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вопрос такой:
напишите процедуру которая бы считывала последовательность
игральных карт и заносила их в массив множеств - по одному
множеству на каждую масть. Один перечислимый тип используйте для
карты,а второй - для масти.Данные каждой карты будут представлены символом,
соответствующим масти и символом, соответствующим карте
('6' .. '10','B','Д','K','T')
вот чего пришло пока в голову
Pascal
1
2
3
4
5
 type 
    longstring = string[3]; // один символ на масть и два на карту (число 10 имеется ввиду)
    mast = (wini, kresti, bubi, hervi);
    karts = (six, seven, eight, nine, ten, valet, dama, corol, tuz);
    koloda = array [ mast, karts ] of longstring;
дальше думается либо контроль ввода организовать
посимвольно например для масти
Pascal
1
2
3
     repeat 
      readln(c); //c: char
     until c in['w','k','b','h'];
либо голова уже отказывает
может у кого какие соображения есть
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2014, 15:38
Ответы с готовыми решениями:

Мастям игральных карт присвоены порядковые номера. Вывести название соответствующих карт
Помогите решить задачу!!! Мастями игральных карт присвоены порядковые номера:1-пики;2-трефы;3-бубны;4-червы.Достоинству карт,старших...

Задачка на кодировку игральных карт
Закодируем игральные карты с помощью натуральных чисел следующим образом: 1-двойка треф, 2 - тройка треф, ..., 13-туз треф, 14 -...

Раздача игральных карт на 3 человека
Всем добрый вечер. Существует такая чешская игра Марьяж, 1 игроку раздается 12 карт, и двум другим по 10 карт. Масти различаются...

7
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
17.07.2014, 15:56
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Цитата Сообщение от ujif Посмотреть сообщение
которая бы считывала последовательность
игральных карт
Откуда считывала?

Добавлено через 4 минуты
Типы
Pascal
1
2
longstring = string[3]; // один символ на масть и два на карту (число 10 имеется ввиду)
koloda = array [ mast, karts ] of longstring;
сами придумали или даны по условию? А то в задании говорится о множествах, а не о строках.
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
17.07.2014, 20:15  [ТС]
задание взято из книги "Turbo Pascal" 5 издание Эллиот Коффман
стр 711...я так думаю,наверно в слове "откуда" в задании имеется ввиду
полная свобода выбора для программиста...

Добавлено через 2 минуты
да про строки сам придумал., а со множествами как раз и проблема
на ум ничего не идет

Добавлено через 41 минуту
вот еще вариант
Pascal
1
2
3
4
5
6
7
8
9
10
 type 
      long = string[3];
      mast = (W, K, B, H);
      karts = (six, seven, eight, nine, ten, valet, dama, corol, tuz);
      kart = set of karts;
  const 
      kar : array [ karts ] of long = ('6','7','8','9','10','V','D','C','T');
   type 
       koloda = array [ mast ] of kart;
    var ko: koloda;
как заполнять , голова кипит

Добавлено через 1 час 12 минут
вот так ,значит пока получилось
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
  type
    mast = (W, K, B, H);
    karts = (six, seven, eight, nine, ten, valet, dama, corol, tuz);
    kart = set of karts;
    koloda = array [mast] of kart;
   var ko: koloda; i : mast; j: karts;
procedure zapolnenie( var ko: koloda);
  begin
   for i:= w to h do
    for j:= six to tuz do
     ko [ i ]:= ko [ i ] + [ j ];
   end;
4 множества в массиве ,НО заполняет конечно только
каждое множество перечислимым типом kart
а надо по условию
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
18.07.2014, 11:44
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Можно как-то так:
Pascal
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
type
  TSuit = (ErrSuit,
    Hearts {черви}, Diamonds {бубны}, Clubs {трефи}, Spades {пики});
  TRank = (ErrRank,
    Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten,
    Jack, Queen, King);
  TDeck = array [Hearts..Spades] of set of Ace..King;
 
const
  SuitStrings: array [TSuit] of string[5] = ('?',
    #3'ЧчHh', #4'БбDd', #5'ТтCc', #6'ПпSs');
  RankStrings: array [TRank] of string[4] = ('?',
    'ТтAa', '2', '3', '4', '5', '6', '7', '8', '9', '10',
    'ВвJj', 'ДдQq', 'КкKk');
 
function SuitToStr(s: TSuit): string;
begin
  SuitToStr:=SuitStrings[s][1];
end;
 
function RankToStr(r: TRank): string;
begin
  if r=Ten then RankToStr:=RankStrings[r] else RankToStr:=RankStrings[r][1];
end;
 
function StrToSuit(s: string): TSuit;
var i: TSuit;
begin
  StrToSuit:=ErrSuit;
  if s='' then Exit;
  for i:=Hearts to Spades do
    if Pos(s[1],SuitStrings[i])<>0 then begin
      StrToSuit:=i; Break;
    end;
end;
 
function StrToRank(s: string): TRank;
var i: TRank;
begin
  StrToRank:=ErrRank;
  if s='' then Exit;
  for i:=Ace to King do
    if Pos(s[1],RankStrings[i])<>0 then begin
      StrToRank:=i; Break;
    end;
end;
 
var
  Deck: TDeck;
  rank: TRank;
  suit: TSuit;
  s, c: string;
begin
  for suit:=Hearts to Spades do Deck[suit]:=[];
  Write('Допустимые обозначения рангов:');
  for rank:=Ace to King do Write(' ',RankStrings[rank]); WriteLn;
  Write('Допустимые обозначения мастей:');
  for suit:=Hearts to Spades do Write(' ',SuitStrings[suit]); WriteLn;
  WriteLn('Вводите через пробел последовательность карт в виде РангМасть,');
  WriteLn('для завершения ввода нажмите Enter:');
  repeat
    Write('> '); ReadLn(s);
    if s='' then Break;
    s:=s+' ';
    while Copy(s,1,1)=' ' do Delete(s,1,1);
    repeat
      c:=Copy(s,1,Pos(' ',s)-1);
      suit:=ErrSuit; rank:=StrToRank(s);
      if rank<>ErrRank then begin
        Delete(s,1,1+Integer(rank=Ten));
        suit:=StrToSuit(s);
      end;
      if (rank=ErrRank) or (suit=ErrSuit) then
        WriteLn('*** Не опознана карта: "', c, '"')
      else
        Include(Deck[suit],rank);
      Delete(s,1,Pos(' ',s));
      while Copy(s,1,1)=' ' do Delete(s,1,1);
    until s=''
  until false;
  Write('Содержимое колоды:');
  for suit:=Hearts to Spades do
    for rank:=Ace to King do
      if rank in Deck[suit] then
        Write(RankToStr(rank):3,SuitToStr(suit));
end.
Тестовый прогон:
Допустимые обозначения рангов: ТтAa 2 3 4 5 6 7 8 9 10 ВвJj ДдQq КкKk
Допустимые обозначения мастей: ♥ЧчHh ♦БбDd ♣ТтCc ♠ПпSs
Вводите через пробел последовательность карт в виде РангМасть,
для завершения ввода нажмите Enter:
> ss Ah 2D 10c ks
*** Не опознана карта: "ss"
> 3п 7п Тп
>
Содержимое колоды: Т♥ 2♦ 10♣ Т♠ 3♠ 7♠ К♠


PS. Тег code в тестовом прогоне испортит значки мастей.

Добавлено через 8 минут
Если хочется видеть туза после короля, в типе TRank переставьте Ace после King:
Pascal
1
2
3
 TRank = (ErrRank,
    Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten,
    Jack, Queen, King, Ace);
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
18.07.2014, 11:51  [ТС]
Спасибо Уважаемый bormant за поддержку,
очень красиво написано
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
18.07.2014, 12:04
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Можно довольно "дёшево" раскрасить вывод:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses crt;
const
  SuitColors: array [TSuit] of Byte = (Yellow, Red, Red, DarkGray, DarkGray);
...
  for suit:=Hearts to Spades do
    for rank:=Ace to King do
      if rank in Deck[suit] then begin
        TextColor(SuitColors[suit]);
        Write(RankToStr(rank):3,SuitToStr(suit));
      end;
  NormVideo;
end.
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
18.07.2014, 12:31  [ТС]
думаю в конце проги добавить приглашение в казино
и нарисовать пару бутылок шампанского
0
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
19.07.2014, 18:57  [ТС]
вот как-то так получилось

Pascal
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
 Uses Crt; 
 type
   mast = (W,K,B,H);//перечислимый тип масти(вини,крести..)
   long = string[3];
     karts = (six,seven,eight,nine,ten,valet,dama,corol,tuz);
      kart = set of karts;  
    kol = array [mast] of kart; //в массиве 4 множества по числу мастей
 const    // для вывода на экран достоинства карты 
      kar : array [karts] of long = ('6','7','8','9','10','v','d','c','t');
  var  ko: kol; //ko переменная массива kol
        i: mast; // переменная перечислимого типа mast
        j: karts; // переменная перечислимого типа karts
        m: byte; // количество вводимых карт
function limit:byte;  // определяет количество вводимых карт 
 begin
writeln('введите кол-во карт кот.надо занести в колоду не более 36');
writeln('eсли введете 36,то массив карт заполнится автоматически');
 repeat
   readln(m);
 until(0 < m)and(m < 37);
   ClrScr; // очищаем экран от того строк и введенной цифры m
   limit:= m;
 end;
{ zap заполняем колоду в зависимости от количества 
 если m ввели = 36 ,то колода заполняется автоматом,
 если m ввели меньше 36 ,то вводим все вручную }
procedure zap(var ko: kol;const k:byte);
  begin
  if k = 36 then
    for i:= w to h do
     for j:= six to tuz do
       include(ko[i],j)
     { for i:= w to h do //или так - тоже вся колода
     for j:= six to tuz do
    ko[i]:= ko[i] + [j]; }
       else
  if k < 36 then  begin
writeln('введите масть W,K,B,H и через пробел достоинство карты(six,seven..) и нажмите  Enter');
    for m:= 1 to k do begin
      read(i,j);//i- W,K,B,H масть,j-карты перечисл.тип
      include(ko[i],j) //вставляем в массив множеств ко
    end;// для for m:= 1
      ClrScr; //очищаем экран от того что вводили здесь
  end; // для  if k < 36
  end; // конец процедуры zap
procedure output(ko: kol);
 begin
  for i:= w to h do begin
     for j:= six to tuz do
    if j in ko[i] then write ( i, kar [j], ' ');//выводим в строку все карты одной масти
      writeln; // переход на другую строку 
     end;
 end;
begin  ClrScr;
 zap(ko,limit);//limit кол-во карт кот.надо занести в колоду не более 36
 output(ko);
   readln; // прога ждет нажатия enter
end.
Огромное спасибо за поддержку Уважаемому модератору Puporevu
и bormant
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2014, 18:57
Помогаю со студенческими работами здесь

Из 52 игральных карт случайным образом выбраны 4
Добрый день. Есть такая задачка, вроде решил но немного сомневаюсь в правильности решения. Из 52 игральных карт случайным образом...

Считать из файла числа и занести в массив
Доброго времени суток. Подскажите, как занести только числа, не учитывая пробелы (предполагаю, что какой-нибудь встроеной функции split...

Из колоды в 36 игральных карт случайным образом выбирают 5
Помогите, пожалуйста решить задачу. Желательно с пояснениями. Из колоды в 36 игральных карт случайным образом выбирают 5. Какова...

Мастям игральных карт присвоены следующие номера
Мастям игральных карт присвоены следующие номера: &quot;пики&quot; - а, &quot;трефы&quot; - b, бубны - c, червы - d. По заданому символу масти определить...

Считать из файла слова и занести их в массив string-ов
Как считать слова из файла и занести их в массив типа string?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru