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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

C# Задача - Не мога да си намеря очевидната грешка.

Featured Replies

using System;

namespace SumStudentGrade
{
    class Program
    {
        static void Main(string[] args)
        {
            string firstName;
            string lastName;
            string school;
            int currentClass = 0;
            int enterGrade = 0;
            double sumGrade = 0.0;
            int gradeCounter;
            int schoolSubjects;
            double totalGrade;
            Console.Write("Please enter your first name: ");
            firstName = Console.ReadLine();
            Console.Write("Please enter your last name: ");
            lastName = Console.ReadLine();
            Console.Write("Please enter your school name: ");
            school = Console.ReadLine();
            Console.WriteLine("Please enter your class (1 - 12)");
            Console.Write("Class: ");
            currentClass = int.Parse(Console.ReadLine());

            while (currentClass < 1 || currentClass > 12)
            {
                Console.WriteLine("Error!");
                Console.WriteLine("Enter class from 1 to 12: ");
                Console.Write("Class: ");
                currentClass = int.Parse(Console.ReadLine());
                if (currentClass >= 1 || currentClass <= 12)
                {
                    break;
                }
            }

            Console.WriteLine("How many school subjects u have in school?");
            Console.Write("Answer: ");
            schoolSubjects = int.Parse(Console.ReadLine());

            for (gradeCounter = 0; gradeCounter < schoolSubjects; gradeCounter++)
            {
                Console.Write("Please enter grade from 2 to 6: ");
                enterGrade = int.Parse(Console.ReadLine());
                sumGrade += enterGrade;
                
                while (enterGrade < 2 || enterGrade > 6)
                {
                    Console.WriteLine("Error!");
                    Console.Write("Please enter grade from 2 to 6: ");
                    enterGrade = int.Parse(Console.ReadLine());
                    if (enterGrade >= 2 || enterGrade <= 6)
                    {
                        break;
                    }
                }
            }
            if (gradeCounter == schoolSubjects)
            {
                totalGrade = sumGrade / schoolSubjects;
                if (totalGrade < 3)
                {
                    Console.WriteLine
                        ($"The student: {firstName} {lastName} who is {currentClass} class in {school} school will be in the same class" +
                        $", because his grade is {totalGrade:f2} and it's lower than 3.00 ");
                }
                else if (totalGrade >= 3.00 && currentClass < 12)
                {
                    Console.WriteLine
                        ($"the student: {firstName} {lastName} who is {currentClass} class in {school} school has grade {totalGrade:f2}" +
                        $" and goes to {currentClass + 1} class");
                }
                else if (totalGrade >= 3 && currentClass == 12)
                {
                    Console.WriteLine
                        ($"the student: {firstName} {lastName} who is {currentClass} class in {school} school has grade {totalGrade:f2} " +
                        $"and succesfully finished school!");
                }

            }


        }
    }
}

Кодът може да е хаос, но работи безпроблемно. Поне така мислех докато не забелязах, че когато въведа оценка по-голяма от 6 или по-малка от 2 я смята и нея. Как да го оправя това? Все още съм Newbie и за това питам, дори с риск да бъда смъмрен от по-опитни :D

Защото в проверката пак присвояваш въведената стойност, дори и да е грешна:

while (enterGrade < 2 || enterGrade > 6)
                {
                    Console.WriteLine("Error!");
                    Console.Write("Please enter grade from 2 to 6: ");
                    // махни това -> enterGrade = int.Parse(Console.ReadLine());
                    if (enterGrade >= 2 || enterGrade <= 6)
                    {
                        break;
                    }
                }
            

Отбелязал съм ти кой ред да махнеш.

  • Автор

По този начин се пренабрегва и ще получа пак грешен output, т.е трябва да прочете оценки между 2 и 6, когато се въведе грешна (в този случай по-малка от 2 и по-голяма от 6) да се изпише Error, да поиска нов input и докато не е между 2 и 6 да продължава да иска. Когато получи този Input го прибавя към сметката и пренабрегва грешния.

Да, нещо ми се спи май :)

това:

sumGrade += enterGrade;
                
                

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

преди 1 час, Nikitobee написа:

using System;

namespace SumStudentGrade
{
    class Program
    {
        static void Main(string[] args)
        {
            string firstName;
            string lastName;
            string school;
            int currentClass = 0;
            int enterGrade = 0;
            double sumGrade = 0.0;
            int gradeCounter;
            int schoolSubjects;
            double totalGrade;
            Console.Write("Please enter your first name: ");
            firstName = Console.ReadLine();
            Console.Write("Please enter your last name: ");
            lastName = Console.ReadLine();
            Console.Write("Please enter your school name: ");
            school = Console.ReadLine();
            Console.WriteLine("Please enter your class (1 - 12)");
            Console.Write("Class: ");
            currentClass = int.Parse(Console.ReadLine());

            while (currentClass < 1 || currentClass > 12)
            {
                Console.WriteLine("Error!");
                Console.WriteLine("Enter class from 1 to 12: ");
                Console.Write("Class: ");
                currentClass = int.Parse(Console.ReadLine());
                if (currentClass >= 1 || currentClass <= 12)
                {
                    break;
                }
            }

            Console.WriteLine("How many school subjects u have in school?");
            Console.Write("Answer: ");
            schoolSubjects = int.Parse(Console.ReadLine());

            for (gradeCounter = 0; gradeCounter < schoolSubjects; gradeCounter++)
            {
                Console.Write("Please enter grade from 2 to 6: ");
                enterGrade = int.Parse(Console.ReadLine());
                sumGrade += enterGrade;
                
                while (enterGrade < 2 || enterGrade > 6)
                {
                    Console.WriteLine("Error!");
                    Console.Write("Please enter grade from 2 to 6: ");
                    enterGrade = int.Parse(Console.ReadLine());
                    if (enterGrade >= 2 || enterGrade <= 6)
                    {
                        break;
                    }
                }
            }
            if (gradeCounter == schoolSubjects)
            {
                totalGrade = sumGrade / schoolSubjects;
                if (totalGrade < 3)
                {
                    Console.WriteLine
                        ($"The student: {firstName} {lastName} who is {currentClass} class in {school} school will be in the same class" +
                        $", because his grade is {totalGrade:f2} and it's lower than 3.00 ");
                }
                else if (totalGrade >= 3.00 && currentClass < 12)
                {
                    Console.WriteLine
                        ($"the student: {firstName} {lastName} who is {currentClass} class in {school} school has grade {totalGrade:f2}" +
                        $" and goes to {currentClass + 1} class");
                }
                else if (totalGrade >= 3 && currentClass == 12)
                {
                    Console.WriteLine
                        ($"the student: {firstName} {lastName} who is {currentClass} class in {school} school has grade {totalGrade:f2} " +
                        $"and succesfully finished school!");
                }

            }


        }
    }
}

Кодът може да е хаос, но работи безпроблемно. Поне така мислех докато не забелязах, че когато въведа оценка по-голяма от 6 или по-малка от 2 я смята и нея. Как да го оправя това? Все още съм Newbie и за това питам, дори с риск да бъда смъмрен от по-опитни :D

Не се сърди, но кодът е уникален хаос. Само с един If/else (даже дивотията else if не трябва да я има) трябва да се напише всичко. Описва се всяка една поменлива от какъв клас ще бъде и какви условия ще изпълнява и след това "Break". Изкаваш дадено инфо че нещо е грешно и насочваш потребителят отново да въведе правилна стойност. Не знам за "къф чиф" са сложени и другите два цикъла.

  • Автор

Знам, че е хаос. 

  for (gradeCounter = 0; gradeCounter < schoolSubjects; gradeCounter++)
            {
                Console.Write("Please enter grade from 2 to 6: ");
                enterGrade = int.Parse(Console.ReadLine());
                sumGrade += enterGrade;
                while (enterGrade < 2 || enterGrade > 6)
                {
                    sumGrade -= enterGrade;
                    Console.WriteLine("Error!");
                    Console.Write("Please enter grade from 2 to 6: ");
                    enterGrade = int.Parse(Console.ReadLine());
                    if (enterGrade >= 2 || enterGrade <= 6)
                    {
                        sumGrade += enterGrade;
                        break;
                    }
                }
            }

Направих следната промяна, така безпроблемнно дава резултат, който трябва, но има друг проблем, който при задаването на различен вход намерих: Може да видите как при въвежданто на грешен резултат втори път не ми изписва "Error" а директно дава Please enter a grade from 2 to 6:. Може да видите примерният вход с 1 и 500. След 1 трябваше трябваше да има Error също. image.png.83d9c28a5cb97fd4ace95530000504c8.pngП.С: Както сте забелязали, дава, че резултата е 4,30 а трябва да е 4,20 - т.е добавя и тази единица, а големите числа не ги. No idea why.

Казах ти как да го оправиш - направи въвеждането и след това прави проверка какво е въведено. Ако резултата не е очаквания - даваш грешка и връщаш в началото, ако е правилен - приемаш го и го добавяш. Примерно не правиш цикъл for, а остави само while, като броиш колко резултата са въведени, там си сложи една променлива извън цикъла, например 'count=0', която да увеличаваш, ако е въведен правилен резултат и while проверявай стойността дали е равна на нужния брой 'schoolSubjects'. Например:

int count = 0;
while (count < schoolSubjects) {
                Console.Write("Please enter grade from 2 to 6: ");
                enterGrade = int.Parse(Console.ReadLine());
                if (enterGrade < 2 || enterGrade > 6) {
					Console.WriteLine("Error!");
				} else {
					sumGrade += enterGrade;
					count++;
                }
}

Избягвай да правиш повторения на един и същ код.

На горното май трябва да е наобратно проверката, сега ще редактирам.....

  • Автор

Thank you so much! Честно в момента яко ме е срам, че толкова елементарно нещо не успях да направя, а бях написал 20 реда повече. 

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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