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

7 Периметър и лице на кръг

Здравейте колеги много закъсах на тоя кръг и не мога да разбера защо ми дава area ??

 


namespace PerimeterAndFaceOnRound
{
    class Program
    {
        static void Main(string[] args)
        {
            var areaa= 28.2743338823081;
            var Perimeter = 18.8495559215388;
            var r = double.Parse(Console.ReadLine());
            var area= (area = Math.PI) * r * r;              <-- тука ми подчертава ареа нз защо ?
            Console.WriteLine("PerimeterAndFaceOnRound area=" + area);
        }
    }
}

Тагове:
0
Programming Basics
enevlogiev avatar enevlogiev 1168 Точки
Best Answer

Равното (=) e оператор за присвояване. Т.е. взима се една стойност и се записва в една променлива. Примерно int x = 5;
x
вече пази стойността 5 в себе си. Равното винаги се изпълнява последно, тоест, ако имаш израз от рода на int x = 5 + 5 + 5 * 5; първо ще се пресметне всичко вдясно от = и чак тогава ще се запише в x. В случая получаваме 35. Скобите, от друга страна, променят приоритета на операциите. В горния пример * (умножение) има по-голям приоритет от + (събиране), затова и стойността след пресмятането е 35. Ако сложим скоби, int x = (5 + 5 + 5) * 5, вече първо се изпълнява събирането, а след това умножението. Т.е. в x вече ще запазим 75.

Първата ти грешка е, че не можеш първо в area да запазиш Math.PI, а чак след това да пресмяташ някакви неща и после пак да искаш да ги запазиш там.

Втората ти грешка е, че използваш area преди да си я инициализирал. С ключовата дума var казваш на C# "от този момент нататък имам променлива с име area". Само че, за да се запази в нея някаква стойност, изразът в дясно от равното трябва да бъде пресметнат. А ти в него използваш същата тази area, която още не съществува. За това ти се кара.

6
19/02/2016 00:46:47
Dimit1r89 avatar Dimit1r89 2 Точки

Колеги малко по малко напредвам надявам се до 1 април да я реша: D виште до каде я докарах 

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

namespace PerimeterAndFaceOnRound
{
    class PerimeterAndFaceOnRound
    {
        static void Main(string[] args)
        {
            Console.Write(" Area: r = ");
            var r = double.Parse(Console.ReadLine());
            var area = Math.PI * r * r;
            var Perimeter = 2 * Math.PI * r;
            Console.WriteLine(" Area: r = ");
            Console.WriteLine(" Perimeter: r = ");
            Console.WriteLine(area);
            Console.WriteLine(Perimeter);

        }
    } 
}

0
27/01/2016 22:20:49
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

Има напредък, браво, схванал си принципа. Няколко забележки - първо, на първия ред Console.Write(" Area: r = "); описанието не трябва да е "Area : r =", а нещо от сорта на "Радиусът на окръжността е: " или просто само "r =" защото все пак ще въвеждаш радиуса, а не площта. А после последните 4 реда е важна последователността. Може да ги напишеш или ето така

Console.Write(" Area = ");

Console.WriteLine(area);

Console.Write(" Perimeter = ");
Console.WriteLine(Perimeter);

Или ето така като слееш 2 реда в един :

Console.WriteLine("Area = " + area);

Console.WriteLine("Perimeter = " + Perimeter);

Значи в първия пример забележи че където има само Console.Write там няма да се прескочи на следващия ред, а ще остане на същия и веднага след него ще покаже резултата, и чак след резултата ще изкара нов ред. А при втория вариант се получава така нареченото сливане на текст с променлива, което го правихме на последните лекции, и може да прегледаш пак видеоматериалите за да видиш детайлни подробности как е обяснено. Но иначе много хубаво, че си схванал принципа, имаш идея и логика, само леко ти е трябвало да избуташ реализацията. Иначе предполагам че judge системата ти прие кода за верен или не си го пробвал още?

 

 

0
27/01/2016 22:35:47
IvoFC avatar IvoFC 3 Точки

Аз просто погледнах описанието в условието на задачата. 

Като имаш и формулите не смятам, че има кой знае какво да те затрудни но може да видиш моето решение:

http://pastebin.com/2kxCSDMu

1
28/01/2016 19:44:35
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

За сега няма да напиша решението, само ще ти дам няколко съвета, за да успееш сам да подкараш програмата. Не може в началото да кажеш на колко ще е равно лицето и на колко периметъра (тоест първите 2 реда не трябва да изглеждат така). След което да напишеш формулите за периметъра и лицето отделно, и да ги разпетачва на два различни реда. Така както си написал var area  = (area = Math.PI) *r*r  няма как area да се смята като използва самото себе си като стойност.

0
r3v3nan7 avatar r3v3nan7 365 Точки

Подчертава ти го , защото в скобите area= е грешно. Трябва да е 

var area = Math.PI * r * r;

Oсвен това не разбирам защо са ти променливи areaa и Perimeter след като не виждам да ги използваш ?

 

0
Dimit1r89 avatar Dimit1r89 2 Точки

Благодаря ви явно имам сериозен проблем с Логиката .

0
r3v3nan7 avatar r3v3nan7 365 Точки

Няма проблем. Тази задача не е ли от упражненията Simple Calculations. В смисъл, че на файлът с упражненията мисля че имаше стъпка по стъпка решението.

1
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

има качени вече видеоматериали с лекциите от миналата седмица, пусни си ги пак да ги прегледаш наново и ще ти дойдат идеи :)

1
SimeonT avatar SimeonT 1 Точки

Ето според мен какво трябва да се получи  

това според мен е е решението на задачата : 


            var r = double.Parse(Console.ReadLine());
            var area = Math.PI * r * r;
            var perimeter = 2 * Math.PI * r;
            Console.WriteLine("area = " + area);
            Console.WriteLine("perimeter = " + perimeter);

 

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