Loading...
zontak avatar zontak 457 Точки

Малко въпроси извън домашните :))

Колеги.. стигнах до една задачка в която се пита " Напишете програма, която отпечатва всички възможни карти от стандартно тесте карти без джокери (имаме 52 карти: 4 бои по 13 карти). " Дойде ми на ум масивите.. в един масив да запазя картите от 2 - А , а в другия да запазя 4-те бои.. Хубаво де , но как да накарам програмата да обходи с купите първия масив , после с карите и т.н.. :? Или трябва боите да не са в масив.. Има ли такъв вариант или нещо ми куца логиката?

Тагове:
4
Programming Basics
aslv1 avatar aslv1 304 Точки

Добре си се ориентирал!

Решението се нарича вложени цикли smile

 П. П. Виж тук.

1
HPetrov avatar HPetrov 822 Точки

For loop във For loop ;) Първия ти обхожда боите, 2рия самите карти.

1
achkata avatar achkata 17 Точки

 

 

 

 

static void Main(string[] args)
{
        String[] cardValues = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A"};
        String[] cardColors = { "Diamonds", "Spade", "Clubs", "Hearts" };
        foreach (string value in cardColors)
       {
             Console.Write(value + ":");
             Console.WriteLine(String.Join(";", cardValues));
       }
}

4
zontak avatar zontak 457 Точки

далаверата с String.Join.. не я знаех.. Good job! ;)

6
achkata avatar achkata 17 Точки

Само да вметна, не е нужно масива да е String, за да се използва String.Join("delimiter", array).

Същото би работило и примерно с int[] array.

 

2
coaster avatar coaster 412 Точки

Здравейте, намерих тази темичка с подходящо заглавие, надявам се, че авторът няма против да я използвам, за да задам един въпрос "извън домашните" :)

Искам да се справя с една задача, но нещо се оплетох ТОТАЛНО с всичките цикли в нея и в крайна сметка я докарах до там, че да работи толкова "добре" и дори да не иска да спре да работи :D Тоест някой от циклите трябва да се спре някъде, но не схващам кой или не знам как да го спра..

Ето това направих <ЦЪК> . Условието го има и закоментирано в кода, ще се радвам ако някой хвърли едно око и ми каже къде бъркам...
ПП: Задачата е много интересна за упражнение (според мен), който иска може да се пробва.
ПП2: Абе ето го и условието за по-лесно :D

Да се напише програма, която за въведена от клавиатурата дата извежда кой ден от седмицата се пада на английски и български.
*Програмата да се изпълнява многократно до въвеждане на празна стойност.
*Некоректните дати да не се обработват, а да се извежда съобщение за грешка и да се изисква въвеждане на следваща дата.
-1
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки

Доколкото виждам в основния цикъл (въвела си коректна дата) никъде няма Console.ReadLine, с който да прочетеш следваща дата и той ще се върти постоянно. Наскоро писах в домашното една подобна логика (въведи м или ф, докато въведеното не е точно 'м' или 'ф'), но кодът е на компютъра вкъщи. Ще проверя дали ще сработи в твоя случай.

0
coaster avatar coaster 412 Точки

Ооо, наистина, прав си, добавих го! Сега спира когато си трябва и не се върти като лудо хаха :)
Сега забелязах още нещо, като цъкна Enter би трябвало програмата да се затваря, а тя си продължава заради try catch блока, т.е. то го хваща като FormatException. Как ще стане изходът от нея, сигурно пак нещо трябва да се размести или добави?

-1
RoYaL avatar RoYaL Trainer 6849 Точки

Пробвай вместо IsNullOrEmpty да проверяваш дължината на стринга дали е по-голяма от 0

2
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки

Нека и аз предложа на вниманието ви една задача, с която се занимавах наскоро.

Всички вие предполагам ползвате календар, в който си отбелязвате срещи или някакви напомняния от тип - Дата; Начален Час; Краен Час. В една от локалните ни системи за такива резервации преди време някой беше поискал с чек-бокс се да се отбелязва дали за въпросната среща е необходимо паркомясто. Просто. В един момент поискаха системата да те спира (отказва резервацията / планирането на среща), ако искаш паркомясто, но няма налични за избраната дата и период От-До. Та задачата е следната:

Имате предефинирани Х паркоместа, като в началото на деня всички са свободни. В нашия случай бяха 5.

Имате някакъв брой вече планирани срещи, които имат следните характеристики:

- Дата (в случая тя не играе много роля, защото тя е еднаква за всички срещи, които сравняваме - срещата е точно за 1 дата)

- Начален Час - 00:00 до 23:59

- Краен Час - 00:00 до 23:39, но по-голям от Начален Час

- Брой нужни паркоместа

 

Искате да планирате нова среща с горните характеристики. Програмата да върне True, ако за избрания от вас период има свободни колкото ви трябват паркоместа или False, ако ги няма.

---

Тук интересен е алгоритъмът за пресмятане, не толкова как ще се напише на C#.

-1
RoYaL avatar RoYaL Trainer 6849 Точки

Нещо като псевдо код, понеже говорим за алгоритъм:

 

 

private const int PARK_PLACES = 5;

private Dictionary<DateTime, Dictionary<string, int>> meetings = new Dictionary<DateTime, Dictionary<string, int>>();

private bool _needParkPlace { get; set; }

 

private bool HasParkPlaces(DateTime date)

{

    int parkPlacesSum = 0;

    foreach (var currentMeetings in meetings[date])

    {

          parkPlacesSum += currentMeetings["park_places"];

    }

    return parkPlacesSum >= this.PARK_PLACES; // тук слагам `>`, защото ако поради някакъв бъг стане така, че има 6 заети места `==` няма да сработи и ще позволи на всички останали срещи да се скедюлнат

}

 

private void ScheduleMeetings(DateTime date, bool needParkPlace, int parkPlaces = 0)

{

       this._needParkPlace = needParkPlace;

       if(this._needParkPlace && !this.HasParkPlaces(date))

       {

            throw new Exception("There are no park places for this date");

        }

        meetings.Add(date, new Dictionary<string, int>());

        meetings[date].Add("park_places", parkPlaces);

}

 

Или:

 

private bool HasParkPlaces(DateTime date, int parkPlaces)

{

    int parkPlacesSum = parkPlaces;

    foreach (var currentMeetings in meetings[date])

    {

          parkPlacesSum += currentMeetings["park_places"];

    }

    return parkPlacesSum >= this.PARK_PLACES;

}

 

// така ако са нужни 3 места ще започне сумирането от 3 и ако чрез добавяне към досегашните заети стане 5 или повече ще върне False

 

Естествено, може да се направи и да получава от-до, защото явно е възможно да си пуснеш среща която започва днес и свършва утре (което в реална 8 часова работа от 8 до 5 уж не трябва да е възможно?:)

2
achkata avatar achkata 17 Точки

Здравей,

Бих искал да попитам, за какъв алгоритъм за пресмятане става на въпрос?

Може би условието е непълно или аз нещо не разбирам задачата.

Лично аз го виждам така (елементарно конзолно решение, без БД и файлове):

Клас Meetings, с полета дадените данни, за всяка среща се прави нов обект, и всеки обект се пушва в някаква структура (примерно масив).

Като има заявка за нова среща , обхождат се всички срещи и за съответната дата ако изискват паркоместа се сумират до достигане на 5 или до обхождане на всички срещи за съответната дата.

И това е, може би аз нещо грешно интерпретирам условието на задачата...

П.С. Сега видях , това с часовете на срещата :).

Не променя много цялата визия, само в сумирането се слагат тези паркоместа, които са необходими за съответните срещи в съответната дата, и началото на новата среща е в интервала на провеждане на вече дефинираните срещи.

1
RoYaL avatar RoYaL Trainer 6849 Точки

@achkata, и аз така ги виждам нещата :) Може би има някаква уловка с крайните и началните часове, която нещо не мога да я схвана. Особено когато става въпрос за работни мийтинзи, те се извършват в работно време, така че не трябва дори да ексцийдва деня. А може би уловката е в тайм зоната? Всичко трябва да се случва в Централно Европейско, ако го олзват работници с различен локейл, за да им връща една и съща информация?

 

P.S.: То единственото сравнение на часове трябва да е Start Time на новата среща да проверява дали няма активни срещи (End Time на неприключилите). При едно добре написано приложение, при въвеждане на End Time ще обходи и ще върне със статус Актив примерно, срещите които не са приключили, и ще сметне паркоместата.

3
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки
Имам един въпрос за C#. Може ли в C# да се прави референция към променлива не по име на променлива, а по някакъв label? Псевдо пример: SomeClass.GetVariable("a" + Convert.ToString(i)) =.... ; ако имаме променливи а1, а2, а(i).
-1
dentia avatar dentia 362 Точки

Най-лесно това се случва с масиви.

-1
svetli0o avatar svetli0o 134 Точки

            Струва ми се, че е това което имаш предвид. Това ще създаде dictionary с ключ от а0 до а10 със стойност 5. Трябва да добавиш using System.Collections.Generic;

            Dictionary<string, int> dictionary = new Dictionary<string, int>();
            for (int i = 0; i < 10; i++)
            {
                dictionary.Add("a" + i, 5);
            }
            foreach (var item in dictionary)
            {
                Console.WriteLine(item.Key + " = " + item.Value);
            }

-1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.