Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

 

Въпроси относно задача на C#

Featured Replies

Накратко искам да се науча да решавам задачите давани на изпити по информатика в ПУ, обаче някои неща ми убягват и не успявам да ги намеря в нета, а пък решения на задачите има само в един сайт, където са само варианти от 2009 и 2010 решени и при това на C++, затова моля вас за помощ. Ето един примерен вариант, тъй като всяка година се дава подобна задача:

Spoiler

Компютърна компания е назначила нови служители. Напишете компютърна програма, която да извършва следните действия.

1. За всеки служител се въвеждат данни в следния вид:

 име (знаков низ, не по-дълъг от 50 знака);

 ЕГН (ЛНЧ) (низ с дължина до 15 знака)

 име с латински букви (знаков низ, не по-дълъг от 50 знака);

 местоживеене: държава, пощенски код, град (низове до 30 знака).

Броят на новоназначените служители е по-малък от 50.

2. Извежда на екрана данни за служителите, сортирани по държава, а тези които са от една и съща държава – сортирани по азбучен ред на името. На всеки отделен ред се извеждат: име, ЕГН, име с латински букви и местоживеене. Данните да бъдат разделени със запетая и интервал. Например: Иван Петров Иванов, 234567890, Ivan Ivanov, България, , Пловдив

3. Приемаме, че някои полета са задължителни, т.е. в тях не трябва да има празни низове. Задължителните полета са: име, ЕГН, име на английски и държава. Да се изведе списък със служителите, за които не са въведени задължителните полета. Списъкът да е сортиран по ЕГН.

4. За всеки един от служителите трябва да се генерира име на служебна поща по следния начин (данните извличаме от името с латински букви, ако не е празно): ‹Фамилия›_‹Име›_‹Първата буква от бащиното име›@nncomputers.com. Ако в името на английски липсват бащино, или първо и бащино име, те се пропускат при генерирането на пощата. Да се изведе списък с имената на новите служители и пощата, за които името на пощата е генерирано успешно. За примера в точка две резултатът ще бъде: Иван Петров Иванов, email: [email protected]

Някои от нещата, които не знам, е как да задам някаква максимална стойност на низовете (30, 50...) и въобще трябва ли да им я задам тази стойност, или това е просто описание на какво въвежда потребителя и какво да очаквам като input? Като цяло постигнах някакъв резултат с do while цикъл, който се повтаря ако въведена стойност не е в допустимите граници, но не знам дали това е най-ефикасният начин. Сега като се замисля мога например на string name да дам name = name.Substring(0, length) и ако потребителя е надвишил стойността да се използват само допустимите диапазони на низа в задачата.

Освен това, някой от вас ако случайно е правил изпит в ПУ или подобен, за сортиране предполагам, че трябва да използвам алгоритми? Защото в програмата за изпита пише, че трябва да се научат алгоритми за сортиране на масив от числа, което ме навежда до мисълта, че не мога да си нащракам Array.Sort или нещо подобно.

Знам, че въпросите ми сигурно са малоумни, то ще изскочат и още такива докато решавам тия задачи, но от скоро се уча на тия неща и по-добре да питам, отколкото да напиша някакви простотии.

Приятел , не искам да ти решавам задачките , прекалено елементарни са.Мога да ти дам съвет като за начало.За дължините на стринговете просто може да правиш проверки if(age >= 30 && age <== 50) и така нататък.do While не мисля че ще ти е от полза , при положение че имаш да обхождаш структура от данни.По скоро използвай for или foreach.След това си прецени дали ще използваш масив или речник.Лично аз бих го направил с речник, щом се затрудняваш с алгоритмите пробвай с масив или списък.Щом няма да оразмеряваш данните го направи с масив.Относно сортирането, щом задаваш въпроса за array.sort е ясно че по добър сорт от майкрософтския няма да измислиш , тей че ползвай си го смело.

  • Автор
преди 5 часа, Jivko Jelev написа:

Приятел , не искам да ти решавам задачките , прекалено елементарни са.Мога да ти дам съвет като за начало.За дължините на стринговете просто може да правиш проверки if(age >= 30 && age <== 50) и така нататък.do While не мисля че ще ти е от полза , при положение че имаш да обхождаш структура от данни.По скоро използвай for или foreach.След това си прецени дали ще използваш масив или речник.Лично аз бих го направил с речник, щом се затрудняваш с алгоритмите пробвай с масив или списък.Щом няма да оразмеряваш данните го направи с масив.Относно сортирането, щом задаваш въпроса за array.sort е ясно че по добър сорт от майкрософтския няма да измислиш , тей че ползвай си го смело.

Много ти благодаря за отговора! Ще постна един код, който е част от подобна задача, ако можеш ти или някой друг да го прегледа за минутка, да ми кажете дали видимо изглежда добре и следователно някаква критика.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = inputN(); // Брой картотеки

            Kartoteka[] listPesni = new Kartoteka[n]; // Инициализация на масив от картотеки

            fillKartoteka(listPesni); // Попълва информацията за броя картотеки с песни

            // Сортиране на масива от картотеки според заглавието

            SortByTitle(listPesni);
            
            // Изкарване на данните за всички картотеки

            OutputPesni(listPesni);
            
            Console.ReadLine();
        }

        struct Kartoteka
        {
            public string zaglavie;
            public int styleCode;
            public string izpulnitel;
            public int godina;
            public string album;
            public int puskaniq;
        }

        static int inputN()
        {
            int n;
            do
            {
                Console.Write("n = ");
                n = int.Parse(Console.ReadLine());
            } while (!(n >= 1 && n <= 5000));

            return n;
        }

        static void fillKartoteka(Kartoteka[] listPesni)
        {
            for (int i = 0; i < listPesni.Length; i++)
            {
                Console.WriteLine("Картотека {0}", i + 1);
                Console.Write("Заглавие: ");
                listPesni[i].zaglavie = Console.ReadLine();
                Console.Write("Код за стил: ");
                listPesni[i].styleCode = int.Parse(Console.ReadLine());
                Console.Write("Име на изпълнител: ");
                listPesni[i].izpulnitel = Console.ReadLine();
                Console.Write("Година: ");
                listPesni[i].godina = int.Parse(Console.ReadLine());
                Console.Write("Албум: ");
                listPesni[i].album = Console.ReadLine();
                Console.Write("Брой пускания: ");
                listPesni[i].puskaniq = int.Parse(Console.ReadLine());
                Console.WriteLine();
            }
        }

        static void OutputPesni(Kartoteka[] listPesni)
        {
            for (int i = 0; i < listPesni.Length; i++)
            {
                Console.WriteLine("{0}; {1}; {2}; {3}; {4}; {5}", listPesni[i].zaglavie,
                    listPesni[i].styleCode, listPesni[i].izpulnitel, listPesni[i].godina,
                    listPesni[i].album, listPesni[i].puskaniq);
            }
        }

        static void SortByTitle(Kartoteka[] listPesni)
        {
            for (int i = 0; i < listPesni.Length; i++)
            {
                for (int j = i + 1; j < listPesni.Length; j++)
                {
                    Kartoteka temp = new Kartoteka();
                    if (String.Compare(listPesni[i].zaglavie, listPesni[j].zaglavie, true) == 1)
                    {
                        temp = listPesni[i];
                        listPesni[i] = listPesni[j];
                        listPesni[j] = temp;
                    }
                }
            }

        }
    }
}

В метода SortByTitle трябва да сортирам масива от структури Kartoteka (картотека с инфорамация за песни, албуми и т.н.) и като цяло стигнах до горепосоченото решение, в което използвам String.Compare да сравня заглавията на песните, които обхождам и ги сортирам във възходящ абучен ред. Единственият ми проблем, е че сортировката става според английската азбука (или е Unicode или както работи сортирането, не съм много сигурен), но не знам дали това ще е проблем на изпита, тъй като вероятно най-много гледат дали си мислил логично и дали изглежда, че ще работят отделните части от кода.

А за do while цикълът имах предвид това, което съм направил в inputN метода, където имам максимална и минимална стойност, които ако се надвишат продължава да пита за n докато потребителят не въведе число, което е в допустимите рамки. Не съм сигурен ако използвам if оператор какъв да ми е отговора ако е false, да изпише, че не е в допустимите рамки или нещо подобно?

Малко по малко започвам да разбирам нещата, трябва ми само още практика.

преди 2 часа, Днес написа:

temp = listPesni; listPesni = listPesni[j]; listPesni[j] = temp;

Къде учиш? Критики няма да ти правя , не знам от колко време програмираш.Според зависи от колко време кодиш , е логично да получиш похвала или насоки за рефакториране.Като цяло има кво да се пипне , по него.Аз лично бих го направил с 2-3 функции максимум.Не съм го компилирал кода , предполагам че работи , щом го постваш тук.Два съвета имам към теб в текущата ситуация.Разбивай задачката на подзадачки и почни леко по леко да заменяш променливи с бг имена на английски.Ако осъзнаваш всичко в задачата , следващия ти таск за да натрупаш опит е , оптимизиране на задачата.Един път като си я направил , няма да ти е трудно.Ако нещо се сбъгяса , връщаш си същия код ;)

  • Автор
преди 5 минути, Jivko Jelev написа:

Къде учиш? Критики няма да ти правя , не знам от колко време програмираш.Според зависи от колко време кодиш , е логично да получиш похвала или насоки за рефакториране.Като цяло има кво да се пипне , по него.Аз лично бих го направил с 2-3 функции максимум.Не съм го компилирал кода , предполагам че работи , щом го постваш тук.Два съвета имам към теб в текущата ситуация.Разбивай задачката на подзадачки и почни леко по леко да заменяш променливи с бг имена на английски.Ако осъзнаваш всичко в задачата , следващия ти таск за да натрупаш опит е , оптимизиране на задачата.Един път като си я направил , няма да ти е трудно.Ако нещо се сбъгяса , връщаш си същия код ;)

Информатика съм учил последно преди 2 години, мисля. Не съм в профилирана паралелка, занимавам се с тия неща от може би 2 месеца, преди това съм стигал само до условни операции. Заменянето на имената на променливите на английски няма да ми е проблем. Защо си цитирал точно тази част от кода, предполагам има проблем с нея? Просто така съм гледал че се прави bubble sort и съм го пригодил според ситуацията :D 

Без да искал съм я цитирал.Bubble sort се използва само за учебни цели и е най-бавния сорт.Както бях ти написал по-горе ако разгледаш документацията на Майкрософт и основно C# ще забележиш , че техния сорт проверява колко елемента има масива.Ако са малък брой елементи , дефоултния сорт използва insertion sort, ако са голям брой - Quick sort. Иначе щом работи остави го така и учителите ти да видят нивото ти.Хубаво е че се опитваш сам, само така може да станеш добър девелопър.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.