Loading...

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

l000p avatar l000p 13 Точки

C++ Суми прости и непрости числа. Nested Loop Exercise

Здравейте, получавам грешка при задаване на command различна от stop, но и различна от числен израз, при това изпълнение на задача:

Решение - https://pastebin.com/dwc9xYwu

За условие тук -> https://softuni.bg/trainings/resources/officedocument/41910/exercise-guidelines-programming-basics-with-cplusplus-june-2019%20/2401 ----- Задачата  е номер 6.

Линк към Judge - > https://judge.softuni.bg/Contests/Practice/Index/1178#5

 

Грешката идва на тест номер 4, като е изразена с звезда. 

Благодаря ! 

0
Programming Basics
Bobo_bobkata avatar Bobo_bobkata 48 Точки
Best Answer

Здравей грешката ти е че във инпута можеш да получиш stop и STOP като команди за спиране на програмата и като оправиш това дава 100/100 ето и линк към твоето решение със промените https://pastebin.com/kEGP9iqq  промених само условието във while цикъла и махнах проверката дали последната команда е stop защото попринцип се печатат тези 2 реда накрая и няма смисъл от проверката а и за да стигне програмата до там трябва да е излязля от цикъла със една от двете команди. :)

0
02/09/2019 16:45:53
l000p avatar l000p 13 Точки

Благодаря ! 
Очаквах че проблемът може и да е по-задълбочен, явно съм грешал ! 

0
RuNNeR4142 avatar RuNNeR4142 396 Точки

Решение на Java, дано да е полезно: 

 

public class E06SumPrimeNonPrime {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        int primeSum = 0;
        int nonPrimeSum = 0;

        while (!input.equals("stop")) {
            int num = Integer.parseInt(input);
            boolean isPrime = true;
            if (num == 1) {
                isPrime = false;
            }

            if (num < 0) {
                System.out.println("Number is negative.");
            } else {
                for (int i = 2; i <= (num / 2); i++) {
                    if (num % i == 0) {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime) {
                    primeSum += num;
                } else {
                    nonPrimeSum += num;
                }
            }
            input = scanner.nextLine();
        }
        System.out.println("Sum of all prime numbers is: " + primeSum);
        System.out.println("Sum of all non prime numbers is: " + nonPrimeSum);
    }
}
0
l000p avatar l000p 13 Точки

    Здравей, решението което съм предоставил е почти идентично.
    Проблемът изниква когато въведеш в (случая с твоето решение) string input нещо различно от stop, но и различно от числов израз, така в  int num = Integer.parseInt(input); се опитваш да побереш стойността на string и получаваш run time error в моя случай, функцията stoi() реве. (не знам какво става в Java като подадеш string към int, но предполагам същото)

     Ако знаех някаква функция, която да провери дали в string-а са записани само числа щеше да е лесно. Със сегашните ми знания най-вероятно може да стане с някакъв цикъл, който да проверява стринга буква, по буква и ако има space или нещо различно от char от 0 до 9 да създаде флаг... 

    Просто ми изглежда малко вероятно авторите на задачата да са искали да постигнат това .. изглежда ми прекалено усложнено като за задача от basics ?? Някой има ли решение на C++ което е минало с 100/100 ?? 

0
02/09/2019 15:24:23
kolioi avatar kolioi 641 Точки

Това, което ти трябва е stringstream, само че това се учи в курсовете за напреднали :) Например нещо такова:

#include <sstream>
…
string command;
cin >> command;

int number = 0;
istringstream iss(command);
while (iss >> number) {
	…
	cin >> command;
	iss.clear();
	iss.str(command);
}

Излиза от цикъла при първия въведен текст.

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