BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Мнение относно решена задача
pgpanayotov
Публикувано на: 29-04-2018, 20:38
Quote Post



Име: Пламен Панайотов
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 29.04.18



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

Приемам всякакви критики относно решението, Благодаря за отделеното време!!!

Да се състави компютърна програма за обслужване на промоции под формата на карти за отстъпки в магазин за парфюмерия. Броят на клиентите, които могат да се възползват от промоцията е ограничен до 500. Всеки клиент има право на една карта за отстъпки.
1. Да се въведе и контролира цяло число N (в диапазона [1;500]), определящо броя на клиентите, имащи право на карта за отстъпки. За всеки от тези N клиенти да се въведе следната информация:  име и фамилия (знаков низ, не по дълъг от 30 знака);  град на местожителство (знаков низ, не по-дълъг от 10 знака);  10 цифрен код (знаков низ). Първата цифра от него е код за категория стоки (1 – козметика, 2 – парфюми, 3 – аксесоари, 4 – услуги). Втората цифра е код за натрупване на промоции, т.е. прилагане на отстъпката върху вече намалена стока (0 – без натрупване, 1 – с натрупване). Втората двойка цифри е процент на отстъпката (05, 10, 20 или 30). Третата двойка цифри от кода обозначават деня, четвъртата – месеца, а петата – годината на датата на издаване на картата. Например код 2020140517 означава, че картата за отстъпки важи за козметика, без натрупване на промоции, процент на отстъпки: 20%, дата на издаване на картата 14 май 2017 г.
2. Да се изведе списък на всички клиенти, подредени по име в азбучен ред, като за всеки клиент се извежда: име и фамилия, град, категория стоки, натрупване на промоции, процент на отстъпката, дата на издаване на картата. Полетата да бъдат разделени със запетая и един интервал. Например: Петър Иванов, Пазарджик, парфюми, без натрупване, 20, 06.06.17
3. Да се изведе списък на клиентите от Пловдив с карта за отстъпки на козметика. Изведената информация за клиент да бъде във формата от условие 2. Списъкът да се подреди в нарастващ ред по процентна отстъпка, а при еднаква стойност клиентите да бъдат подредени по име в азбучен ред.
4. Да се въведе категория на стока (например 2). Да се намери и изведе максималният процент на отстъпка за въведената категория


Указание към задачата При решаване на задачата по програмиране трябва: а) да се опише словесно използваният алгоритъм; б) да се опише на хартия решението на задачата на един от следните езици за програмиране: Pascal, C, C++, C#, Java, Basic; в) да се коментира написания текст на програмата като се посочи предназначението на основните променливи и структури от данни, както и използваните процедури и функции.

CODE
using System;
using System.Collections.Generic;
using System.Linq;


namespace zad17_1
{
   struct Klienti  // Структура описваща клиента.
   {
       public string name;
       public string town;
       public string clientCode;
   }
   class Program
   {
       static string VidStoka(string code)
       {
           var a = "0";
           switch (code[0] - '0')
           {
               case 1:
                   a = "козметика";
                   break;
               case 2:
                   a = "парфюми";
                   break;
               case 3:
                   a = "аксесоари";
                   break;
               case 4:
                   a = "услуги";
                   break;
               default:
                   a = "невалиден";
                   break;                  
           }
           return a;
       }   // Метод, който връща вида стока от код.

       static string Natrupvane(string code)
       {
           var a = "0";
           switch (code[1] - '0')
           {
               case 0:
                   a = "без натрупване";
                   break;
               case 1:
                   a = "с натрупване";
                   break;
               default:
                   a = "невалиден";
                   break;
           }

           return a;
       }   // Извличане на натрупване от код.

       static void Main() // Главен метод на програмата.
       {
           Console.Write("Въведете брой клиенти: ");
           var n = int.Parse(Console.ReadLine());
           var list = new List<Klienti>(); // Инициализира нов лист с клиенти.

           if (n > 0 && n <= 500)
           {
               for (var i = 0; i < n; i++)
               {
                   Console.WriteLine("Въведете информация за клиент № " + (list.Count + 1));
                   var klient = new Klienti();
                   Console.Write("Име и фамилия: ");
                   klient.name = Console.ReadLine();
                   Console.Write("Град: ");
                   klient.town = Console.ReadLine();
                   Console.Write("10 цифрен код: ");
                   klient.clientCode = Console.ReadLine();
                   list.Add(klient);
               }   // Цицъл въвеждащ данни за клиентите.
           }   // Проверка за валиден брой клиенти.
           else
           {
               Console.WriteLine("Броят клиенти трябва да бъде от 1 до 500.");
               return;
           }   // Проверка за валиден брой клиенти.

           list.Sort((x, y) => string.Compare(x.name, y.name));    // Сортиране на клиентите по име.

           for (var i = 0; i < n; i++)
           {
               Console.Write(list[i].name + ", ");
               Console.Write(list[i].town + ", ");
               Console.Write(VidStoka(list[i].clientCode) + ", ");
               Console.Write(Natrupvane(list[i].clientCode) + ", ");
               Console.Write(list[i].clientCode.Substring(2, 2) + "%, ");
               Console.Write(list[i].clientCode.Substring(4, 2) + '.');
               Console.Write(list[i].clientCode.Substring(6, 2) + '.');
               Console.WriteLine(list[i].clientCode.Substring(8, 2) + 'г');
           }   // Извежда въведените клиенти на конзолата.

           Console.WriteLine("Натиснете клавиш за да продължите към точка № 3 от зад.");
           Console.ReadKey(true);

           list.Sort((x, y) => string.Compare(x.clientCode.Substring(2, 2), y.clientCode.Substring(2, 2)));    // Сортира по % отстъпка.
           for (var i = 0; i < n; i++)
           {
               if (list[i].clientCode[0] == '1')   // Проверява и извежда всички клиенти с остстъпка за козметика.
               {
                   Console.Write(list[i].name + ", ");
                   Console.Write(list[i].town + ", ");
                   Console.Write(VidStoka(list[i].clientCode) + ", ");
                   Console.Write(Natrupvane(list[i].clientCode) + ", ");
                   Console.Write(list[i].clientCode.Substring(2, 2) + "%, ");
                   Console.Write(list[i].clientCode.Substring(4, 2) + '.');
                   Console.Write(list[i].clientCode.Substring(6, 2) + '.');
                   Console.WriteLine(list[i].clientCode.Substring(8, 2) + 'г');
               }
           }

           Console.WriteLine("Натиснете клавиш за да продължите към точка № 4 от зад.");
           Console.ReadKey(true);

           Console.Write("Въведете категория: ");   // Точка 4-ри от задачата.
           var kategoriq = int.Parse(Console.ReadLine());  // Въвеждане на категория.
           var maxprom = new List<string>();
           for (var i = 0; i < n; i++)
           {
               switch (kategoriq)
               {
                   case 1 when list[i].clientCode[0] == '1':
                       maxprom.Add(list[i].clientCode.Substring(2, 2));
                       break;
                   case 2 when list[i].clientCode[0] == '2':
                       maxprom.Add(list[i].clientCode.Substring(2, 2));
                       break;
                   case 3 when list[i].clientCode[0] == '3':
                       maxprom.Add(list[i].clientCode.Substring(2, 2));
                       break;
                   case 4 when list[i].clientCode[0] == '4':
                       maxprom.Add(list[i].clientCode.Substring(2, 2));
                       break;
                   default:
                       break;
               }
           }
           Console.WriteLine("Максималната отстъпка на категория {0} e: {1}%", VidStoka(kategoriq.ToString()), maxprom.Max());
       }
   }
}


Това мнение е било редактирано от pgpanayotov на 29-04-2018, 20:42
PMEmail Poster
Top
ldbl
Публикувано на: 30-04-2018, 09:13
Quote Post



Име: Станислав Неделчев
Група: Потребител
Ранг: Активен

Мнения: 259
Регистриран на: 22.09.07



вземи си тази книга
http://hristokrushkov.com/cpp.html


--------------------
PMEmail PosterUsers WebsiteICQ
Top
Gamma Goblin
Публикувано на: 30-04-2018, 09:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1236
Регистриран на: 21.02.18



Получаваш слаб 2 заради неправилно ползване на "var"


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
Im not intimidated by the good looking ones, it's the ugly ones that scare the shit out of me
PMEmail PosterUsers Website
Top
CPPlus
Публикувано на: 01-05-2018, 10:59
Quote Post



Име: Людмил Григоров
Група: Потребител
Ранг: Почетен член

Мнения: 1098
Регистриран на: 22.06.11



QUOTE (Gamma Goblin @ 30-04-2018, 09:17)
Получаваш слаб 2 заради неправилно ползване на "var"

Абе какъв им е проблема на хората и на ReSharper-a с тоя var... винаги съм си мислел, че без var е по-добре с изключение на някои много дълги декларации.


--------------------
Нищо не е свършило, докато не е свършило! Не се предавай и ще постигнеш целта си!
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 01-05-2018, 11:10
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1236
Регистриран на: 21.02.18



QUOTE (CPPlus @ 01-05-2018, 10:59)
QUOTE (Gamma Goblin @ 30-04-2018, 09:17)
Получаваш слаб 2 заради неправилно ползване на "var"

Абе какъв им е проблема на хората и на ReSharper-a с тоя var... винаги съм си мислел, че без var е по-добре с изключение на някои много дълги декларации.

вече го обсъдихме в другата тема за вар


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
Im not intimidated by the good looking ones, it's the ugly ones that scare the shit out of me
PMEmail PosterUsers Website
Top
pgpanayotov
Публикувано на: 03-05-2018, 21:23
Quote Post



Име: Пламен Панайотов
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 29.04.18



Ето още една, при която се постарах да няма var.

Иска се: 1. Въвежда с контрол на стойностите броя на студентите от 5 до 550 и за всеки
студент се въвеждат следните данни: трите имена на студента (низ до 30 знака с
интервали); специалност (низ до 20 знака, например: “БИТ“, „СТД“, „Информатика“ и
т.н.); оценка от кандидатстудентския изпит; форма на обучение (низ до 15 знака –
напр.: „редовно“, „задочно“, „дистанционно“ …).
2. Извежда пълните данни за всички записани студенти, подредени по азбучен ред
на специалността, а при една и съща специалност – по намаляващ ред на общия бал,
който се образува по формулата: БАЛ = 6*оценката от кандидатстудентския изпит. За
всеки студент на отделен ред на екрана се извеждат: име, специалност, формата на
обучение и бал. Полетата да бъдат разделени със точка и запетая и интервал. Например:
Иван Петров Иванов; БИТ; редовно; 30.60
Ваня Пеева Матеева; БИТ; редовно; 28.50
3. За предварително въведени специалност и форма на обучение програмата да
изведе списък с имената на студентите, записани в тази специалност и форма на
обучение. Списъкът да бъде азбучно подреден по име на студент.
4. При въведените специалност и форма на обучение да се изведе средния бал на
студентите, записани в тази специалност и форма на обучение.


CODE
using System;
using System.Collections.Generic;

namespace zad16_1
{
   struct Studenti // Структура описваща студент.
   {
       public string name;
       public string spec;
       public double grade;
       public string form;
       public double bal;
   }

   class Program
   {
       static void Main()
       {
           Console.Write("Въведете брой студенти: ");
           int n = int.Parse(Console.ReadLine());  // Въвежда в променлива броя на студентите, с които ще работим.

           List<Studenti> list = new List<Studenti>(); // Инициализира нов лист от Studenti.

           if (n >= 5 || n <= 550) // Проверка, въведеният брой студенти е в зададените граници.
           {
               for (int i = 0; i < n; i++) // Цикъл, с който въвеждаме всеки студент по отделно.
               {
                   Studenti student = new Studenti();
                   Console.WriteLine("Въведете данни за студент №" + (list.Count + 1));
                   Console.Write("Въведете 3 имена: ");
                   student.name = Console.ReadLine();
                   Console.Write("Въведете специалност: ");
                   student.spec = Console.ReadLine();
                   Console.Write("Въведете отценка: ");
                   student.grade = double.Parse(Console.ReadLine());
                   Console.Write("Въведете форма на обучение: ");
                   student.form = Console.ReadLine();
                   student.bal = student.grade * 6;
                   list.Add(student);
               }              
           }
           else
           {
               Console.WriteLine("Невалиден брой студенти!");  // Извежда съобщение при невалидно число "n".
           }
           list.Sort((x, y) =>
           {
               int comp = string.Compare(x.spec, y.spec);
               if (comp == 0) comp = y.bal.CompareTo(x.bal);
               return comp;
           }); // Сортираме по специалност, и бал.

           for (int i = 0; i < n; i++) // Извежда листа със студентите на екрана.
           {
               Console.WriteLine("{0}; {1}; {2}; {3}", list[i].name, list[i].spec, list[i].form, list[i].bal);
           }

           /*Въвеждаме специалност и форма на обучение за точка 3 и 4 от задачата.*/
           Console.Write("Въведете специалност: ");
           string specialnost = Console.ReadLine();
           Console.Write("Въведете форма на обучение: ");
           string forma = Console.ReadLine();

           List<Studenti> list1 = new List<Studenti>();
           

           for (int i = 0; i < n; i++) // Правим проверка и въвеждаме в нов лист отговарящите на зададените критерии.
           {
               if (specialnost == list[i].spec && forma == list[i].form)
                   list1.Add(list[i]);                
           }

           list1.Sort((x, y) => string.Compare(x.name, y.name));
           double sum = 0.0; // Променлива, която ще използваме за средно аритметично.
           for (int i = 0; i < list1.Count; i++)
           {
               Console.WriteLine("{0}; {1}; {2}; {3}", list1[i].name, list1[i].spec, list1[i].form, list1[i].bal);
               sum += list1[i].bal;
           }
           Console.WriteLine("Среден успех: " + (sum / list.Count)); // Извежда на екрана среден бал.
       }
   }
}
PMEmail Poster
Top
Stilgar
Публикувано на: 03-05-2018, 23:23
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 12052
Регистриран на: 13.05.08



Правилното не е да няма var. Правилното е да няма var вместо int, double, string и другите типове дето си имат keyword и да няма var когато типът не е ясен. Тоест

CODE
var clients = GetClients(); //bad
var clients = new List<Client>(); //good


--------------------
Опитахме се да го направим както трябва, но стана както винаги.
PMEmail PosterUsers Website
Top
stewie
Публикувано на: 04-05-2018, 09:11
Quote Post



Име: Голям Черен Негър
Група: Форумен член
Ранг: Почетен член

Мнения: 4129
Регистриран на: 14.07.16



Да щото ако напишеш var counter = 0 ще отидеш в сливенският затвор. Както и за var client = GetClient().
PM
Top
Stilgar
Публикувано на: 04-05-2018, 09:55
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 12052
Регистриран на: 13.05.08



QUOTE (stewie @ 04-05-2018, 09:11)
Да щото ако напишеш var counter = 0 ще отидеш в сливенският затвор. Както и за var client = GetClient().

Не, просто Бендъра ще ти пише двойка, а в моите проекти няма да можеш да commit-неш


--------------------
Опитахме се да го направим както трябва, но стана както винаги.
PMEmail PosterUsers Website
Top
SuN
Публикувано на: 04-05-2018, 10:08
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 6853
Регистриран на: 27.01.05



QUOTE (stewie @ 04-05-2018, 09:11)
Да щото ако напишеш var counter = 0 ще отидеш в сливенският затвор. Както и за var client = GetClient().

Не разбирам. Над половината програмисти в света го пишат така, но според някои форумни звезди това не е правилно? Даже хората си измислиха специален език, в който това е правилния начин за изписването на реда - js.


--------------------
Копирай лесно ударено и - ѝ Ѝ
Замърсяване на въздуха в София - http://aqicn.org/city/bulgaria/sofia/druzhba/
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0