Loading...
kmilewa avatar kmilewa 2 Точки

C++ Лице на правоъгълник

Здравейте!

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

По конкретно ме интересува как точно направихте проверката? (Бел.р.: "2. Допишете програмата по-горе, за да пресмята лицето на правоъгълника и да го проверява.")

Благодаря!

Тагове:
0
Programming Basics
BobyTopalova avatar BobyTopalova 26 Точки

# include <iostream>
using namespace std;
int main(){
   int sideA;
   int sideB;
   cin>> sideA;
   cin >> sideB;
   cout<< sideA*sideB<< endl;
return(0);
}

0
dmartinov avatar dmartinov 37 Точки

Тъй де, но това е само първата част на задачата. Демек пресмятането на лицето - дефинират се променливите за страна А и страна Б и после се принтва резултата от А*Б. Второто условие обаче е да се направи проверка и тук трябва да допълним условието, което колегата е дал по-горе, тъй като в него са зададени стойности, а именно 3 варианта:

a

b

area

2

7

14

7

8

56

12

5

60

 

Та след като имаме конкретни стойности, а една проверка изисква да знаем крайния резултат, то следва да проверим дали нашите изходни стойности ще попадат в някой от 3-те варианта - 14, 56 или 60 и съответно да връща true или false. Например нещо от сорта на IF, което обаче е функция, която в началната лекция не беше засегната и не съм сигурен - аз ли бъркам дефиницията на "проверка" или просто това е начин да се поинтересуваме от нещо допълнително :)

Иначе трябва да е нещо от сорта на:

 

#include <iostream>
using namespace std;

int main(){

    double a, b; {
    cout << "Please enter length of side A in cm:" << endl;
    cin >> a;
    cout << "Please enter length of side B in cm:" << endl;
    cin >> b;
    }

    double i = a * b;
    cout << "Area is " << i << " square cm" << endl;

    if (i == 14) {
        cout << "Result is true" << endl;
        }
    else {
        if (i == 56) {
            cout << "Result is true!" << endl;
            }
        else {
            if (i == 60)
                cout << "Result is true" << endl;
            else {
                cout << "Result is false. Area should be 15, 56 or 60" << endl;
            }
        }
    }

return 0;
}
 

С единственото условие, че judge няма да приеме това зради текста, но на мен така ми е по-пригледно, а и това е просто пример :) Освен това вместо double може да се ползва int тъй като по задание числата са цели. Аз го направих с double просто защото исках да имам възможност да вкарвам и стойности различни от цели числа :)

0
05/06/2019 11:29:11
kmilewa avatar kmilewa 2 Точки

Дааа, това вече е друго нещо. Аз реших, че проверката трябва да представлява не точно дали тези числа се използват, а като цяло. Поради което направих while цикъл, който да провери дали не се използват отрицателни стойности или 0 на a, b. Но твоето решение също много  ми допада :) Благодаря!

0
05/06/2019 16:19:54
dmartinov avatar dmartinov 37 Точки

Да, твоят подход също е интересен и тук нещата наистина се свеждат до разбирането за "проверка". Тааа, при наличието на предварително зададени параметри аз предположих, че става въпрос да проверим дали са изпълнени и затова подходих по този начин. Интересно ми е обаче да видя и твоето решение - би ли го показала? :)

0
kmilewa avatar kmilewa 2 Точки

Да, разбира се. Заповядай! 

П.С. понеже сме учили само while, без if или else за това е толкова първобитно написан :D

#include <iostream>

using namespace std;

int main () {

    int a;
    int b;
    int result_of;

    cin>>a;
    cin>>b;

    result_of = a* b;
    cout<<result_of<<endl;

        while (a<=0)
        {cout<<"Invalid input"<<endl;
        return 0;}

        while (b<=0)
        {cout<<"Invalid input"<<endl;
        return 0;}


    return 0;

}
 

0
05/06/2019 21:17:14
BobyTopalova avatar BobyTopalova 26 Точки

Чудя се защо за тази проверка използваш while,  същата работа би ти свършила и една провека с if( a<=0) и съответно и за b. Задачата е за един вход на две страни на правоъгълник, и те се въвеждат еднократно, за какво е този цикъл?

 

0
dmartinov avatar dmartinov 37 Точки

@kmilewa: Това също работи, но (нали знаеш, че винаги има по едно "но" :))

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

int a;
int b;
int result_of;

Може да стане просто:

int a, b, result_of;

Второ - не е нужно да има return 0; в края на всеки range. Return 0; на практика означава, че програмата приключва.

Трето - При негативна стойност на някоя от променливите, на които правиш проверка, изхода е един и същ. Така независимо на коя от тях подам отрицателна стойност единственото, което ще разбереш, е че съм го направил, но не и на коя от двете. Просто в текста който изкарваш за проверка, добави и текст за коя променлива се отнася

0
06/06/2019 09:45:19
kmilewa avatar kmilewa 2 Точки

dmartinov, благодаря за съветите! Начинаеща съм доста, така че дори не знаех, че може на един ред и т.н. :)

 

BobyTopalova, използвах този цикъл защото мислих, че трябва да използваме нещо, което сме коментирали в текущата лекция (а там коментирахме само и единствено for, while) а не да използваме нещо, което не сме коментирали, но намерили информация за него в нета.. В последствие разбрах, че няма значение какво и как използваме, стига да работи правилно и кода да е красив :)

0
06/06/2019 10:33:01
dmartinov avatar dmartinov 37 Точки

Всъщност допуснал съм грешка в коментара си по-горе. Правилно си добавила return 0; в рейнджа на while цикъла. Ако го махнеш (както аз бях казал, че трябва) ще забиеш постоянно в тоя цикъл. Или иначе казано - нон-стоп ще принтва текста който си подала доакто не убиеш програмката :)

Иначе аз също съм начинаещ, така че приемам критики и ако забележиш някъде моя грешка, смело я казвай. Както се казва "истината се ражда в спора" :) Освен това писането на код е като изразяване на мение - може да го кажеш с различни думи и накрая пак да кажеш едно и също :)

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