Професионална програма
Loading...
rado84 avatar rado84 1 Точки

Как да задам броят на числата за четене да е равен на едно въведено число?

Решавам задачите от simple loops и реших малка част от тях, но за друга идея си нямам как да задам броят на числата за четене да е равен на едно въведено число (задача 4, например). Тоест, ако напишеш 4, да очаква да получи 4 числа на всеки ред.

Тагове:
-1
Programming Basics
rado84 avatar rado84 1 Точки

А за да не пускам излишна тема, продължавам тук: използвам цикъла, който спомена по-горе за 5-та задача, но нещо не ми се получава. Независимо дали Console.WriteLine е вътре в условието или извън него, се случва едно и също:

            int number = int.Parse(Console.ReadLine());

            for (int i = 0; i < number; i++)
            { int num = int.Parse(Console.ReadLine()); }

            Console.WriteLine(Math.Max(number, num));

 

-1
KrasimirPetkov avatar KrasimirPetkov 328 Точки

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

Тоест, като за начало (извън цикъла), декларираш int max = int.MinValue; - използваме MinValue, тъй като ако въведените числа са отрицателни, а max започва от 0, няма да се получи.

После (в самия цикъл) добавяш int num = int.Parse(Console.ReadLine()); за да си прочетеш числото, а след това пак в цикъла, ти трябва if-проверка: if (max<num) { max = num; } - така ако се въведе по-голямо число от сегашния max, то max става равно на него.

Същото може да се замени с max = Math.Max(max,num);

Накрая, след като приключи цикъла, отпечатваш max на конзолата.

Линк с решение: http://pastebin.com/gn3GSvTm

3
14/06/2016 18:56:58
KrasimirPetkov avatar KrasimirPetkov 328 Точки

DeyanPeychev, винаги се използва MinValue за конкретния тип.

Ако имаш int и зададеш max да е -999999, а аз въведа числата -1000000, -1000001 и -1000002, които се събират в int без никакъв проблем, те няма да са по-големи от началното max и програмата ще върне грешен отговор.

4
14/06/2016 19:12:25
DeyanPeychev avatar DeyanPeychev 21 Точки

Не го знаех това за MinValue, от скоро уча C#, до сега бях на C++, благодаря за инфото! smiley

3
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Ето и на C++

#include <limits>

И това ти дава минималната стойност

int min = std::numeric_limits<int>::min();

 

2
14/06/2016 19:21:38
rado84 avatar rado84 1 Точки

Написах го както каза и Джъдж го разбра, но не и аз. Баси главоболието е тая история с циклите. :( Няма ли нек'ва по-разбираема алтернатива на тоя FOR цикъл?

-1
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Има while и do-while, които няма гаранция, че ще са ти по-приятни.

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

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

for (int i = 0; i < 10; i++)
{
    // КОД
}

В този вариант, в началото на цикъла ние казваме:

"Искам да използвам променлива от тип int, на име i, с начална стойност 0. Ще изпълняваш кодът между тези скоби { }, докато i < 10 е вярно. След всяко изпълнение, ще увеличаваш i с 1". Когато i стане равно на 10, условието i<10 няма да е изпълнено и програмата ще продължи нататък.

В случая с твоята задача (Max Number), for-цикълът ти позволява да използваш int.Parse(Console.ReadLine()) и if (num>max) { max = num } определен брой пъти (n), които на нас са ни неизвестни и потребителя ги въвежда на конзолата.

В лекциите, книгата на г-н Наков и dotnetperls можеш да видиш много примери за използването му. С малко практика, всичко ще се нареди.

Успех!

1
14/06/2016 19:49:41
Mario_Krastev avatar Mario_Krastev 23 Точки

Ако изпитваш главоболия още на циклите имаш 2 решения на проблема - решаваш повече задачи или се отказваш! Отначало са леко объркващи обаче ще свикнеш, не е нещо сложно. Нещата занапред стават в пъти по-сложни от някакви цикли. Ако не можеш да решаваш такива задачи, няма как да станат нещата, защото всички задачи напред няма как да бъдат реализирани без цикли. Пусни един дебъгер и виж как работи един for loop, виж на всяка итерация какво и как се променя и ще ти се изяснят нещата. Успех!

0
rado84 avatar rado84 1 Точки

Първата част (това с и < 10) я разбирам донякъде (не на 100%), обаче стигне ли се до това в условието да вкарам нещо различно от WriteLine и после това различно нещо да го отпечатам без да дава грешки при изпълнението и VS да не почне да реве, че нещото не съществува - ей това ми докарва главоболието и зациклям в безкраен loop на неразбиране.

@ Mario_Krastev, ако исках да се отказвам, щях да го направя отдавна и нямаше да питам за алтернатива на въпросното нещо.

-1
DeyanPeychev avatar DeyanPeychev 21 Точки

@rado84 , мисля, че този линк ще ти е от полза, аз от тук започнах да уча програмиране и ми беше сравнително лесно с помощта на този сайт, информацията също е просто предоставена, надявам се да нямаш проблеми с разбирането й. Колкото до самото схващане на циклите ( както и на всичко друго свързано с програмирането ) - писането на код е начина. Пишеш, грешиш, четеш, поправяш и се учиш. С четене само не става, иска си и кодене. Успех! :) 



http://www.programming-bg.com/%D1%83%D1%80%D0%BE%D1%86%D0%B8/C++/%D1%86%D0%B8%D0%BA%D0%BB%D0%B8-for-%D0%B8-while

 


За съжаление, тук е описано на C++, но важното е да схванеш логиката на нещата, тя е еднаква навсякъде, синтаксисът се учи лесно. :)  

0
16/06/2016 15:01:26
rado84 avatar rado84 1 Точки

Може да ти се стори странно, но цикъла от 5-та задача го схванах напълно, едва след като си добавих 3 реда с текст на точно определени места в конзолата, защото изписването само и единствено на цифри ме объркваше. Първо добавих текст, състоящ се от произволни букви, за да видя къде какво ще се покаже, после го редактирах и едва тогава разбрах въпросния цикъл какво прави - цифрите, които се въвеждат горе в кода всъщност са броят цикли, които програмата трябва да направи. И ако въведеш 6, извършва 6 цикъла за 6-те числа поотделно. И понеже променливата макс вече е с абсолютна минимална стойност, каквото и число да въведеш, то все ще е по-голямо от минусовата стойност и затова цикълът показва най-голямото число от 6-те въведени.

Само че за да разбера какво се случва, трябваше един колега от курса да ми представи променливата max от този код

int number = int.Parse(Console.ReadLine());
int max = int.MinValue;
for (int i = 0; i < number; i++)
{
  int num = int.Parse(Console.ReadLine());
  max = Math.Max(num, max);
}
Console.WriteLine(max);

в този вид:

int max = -2147483648;

защото променлива с име max и стойност Min.Value е адски объркващо за мен - противоречието между max и min ме объркваше.

-1
DeyanPeychev avatar DeyanPeychev 21 Точки

Декларирай си една променлива, max, да речем и й задай отрицателна стойност,  примерно -999999. След това в цикъла след всяко въвеждане сравнявай input-а с max, ако input>max, max присвоява input. Накрая просто отпечатваш max и магията е готова. :) 

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