[DSA] Домашно Linear Data Structures - 1 Задача


3

Условие: 

1.Write a program that reads from the console a sequence of positive integer numbers. The sequence ends when empty line is entered. Calculate and print the sum and average of the elements of the sequence. Keep the sequence in List<int>.


Решение:
http://pastebin.com/fVP9u2bW

Чета string от конзолата, след това го парсвам към int с TryParse.
Проверявам дали се е парснало, ако да , правя проверка дали е по-голямо или равно на нула и го добавям в списъка.

Със сигурност има по-умен начин да се направи, но това ми хрумна първите 5 минути. Споделяйте и вашите решения :)




Отговори



3

Решение: цък

Без частта с взимане на инпут:

double average = numbers.Average();

Console.WriteLine(average);


от georgi.ivanov (3261 точки)


0
Ами за твоето решение мога да дам 1-2 предложение как да се махнат някои ненужни неща.
1. Ред 23,24,25 не са ти нужни - то така или иначе ще си продължи и без да му задаваш else { continue; }
2. можеш да преработиш малко do-while цикъла - вместо да се излиза от него с break, можеш да добавиш условието:
do {
...
} while (isParsed)
Крайният резултат би трябвало да е същият.

от gallumbits (2371 точки)


0
Ми да прав си:) Мерси. Някак си по другия начин повече се ориентирам.

от plamen.yovchev (3283 точки)


0

Ето и едно решение от мен:

GitHub

Разбира се като голям будала си написах логиката за Намиране на максимума и средната стойност на листа т.к. забравих, че ги има в LINQ :D

При входа правя 2 проверки:

- дали въведената линия от конзолата е null, празна или само празни места ако е прекъсвам цикъла

- дали числото може да се парсне - ако не, питам пак за число.

Пресмятането на нужните стойности не е нищо специално. Може би бе добра идея да направя методите generic, но това ако остане време :D

П.С. добре че споменахте, че входа може да е само от позитивни числа, въобще не бях видял :D


от Teodor92 (13062 точки)


0
Не си "будала"! Направил съм абсолютно същото, защото Linq работи през IEnumerable, което само по себе си е бави операциите за намиране на макс, мин, ср. стойност и т.н.

от vlad_karamfilov (4595 точки)

0
@vlad_karamfilov - "premature optimization is the root of all evil" ;-)

от staafl (5770 точки)



0

http://pastebin.com/ZrCxWN1Q

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

Можеш да си промениш типа данни за сумата да не е int 

int sequenceSum = numbersContainer.Sum(); - BigInteger или Decimal

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


от pdrenovska (2196 точки)


-2

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

Съвета ми е да вкарате 1-2 метода за по-качествен код, примерно четенето от конзолата да е метод, в момента не мога да постна решение, сори, но предполагам, че се сещате за какво става въпрос.

http://pastebin.com/8tQm1Nvr


от RamiAmaire (1868 точки)


0
Ми някой не сме на твоето ниво, поне аз не съм.

от plamen.yovchev (3283 точки)

0
В такъв случaй съжалявам, наистина помислих, че е waste of space, но ако дори на 1 човек е полезна темата, значи е worth it.

от RamiAmaire (1868 точки)


3

Решение: source.

Една малка оптимизация, която може да се направи е, че вече знаем сумата и трябва просто да разделим на броя елементи (ако има такива).


от jasssonpet (6814 точки)


0
Колега, май не си прочел условието добре;) "reads from the console a sequence of positive integer numbers." "Keep the sequence in List

от Gerya (1079 точки)


2

И аз се прецаках, да направя методи за сумата и средната сума :(. А и сложих ексепшани, където се сетих, а не съм много сигурен дали е необходимо.

Задачка.


от tankovski (2828 точки)


0
Здравей,
Аз също съм направила два метода - Sum(); и Average();, но в метода Average(); извиквам метода Sum();, за да няма повторение на код

от sabrie_n (625 точки)


0
Ето и моето решение:
http://pastebin.com/XLZhcGLR
Въвеждам числата на един ред, разделени с интервал и после ги split-вам по интервал. Добавям ги в лист и пресмятам сумата и средното аритметично.

от s_mihaylov (0 точки)


0

Интересно дали трябва буквално да се изпълнява условието, защото тези въвеждания от конзолата, а и проверки дали числото е цяло и положително поне на изпита с bgcoder не ни трябват. Но направих това за тази задача, а за другите може би ще променя.

Не съм отделяла методи, защото няма какво толкова да се отделя. А сумата като метод на списъчна структура - I like it!

Edit: Не хвърлям exception, защото грешката може да се получи по време на въвеждането, затова правя цикъл, докато не се въведе цяло положително число, като в списъка добавям само валидните данни (при празен ред - край на въвеждането).

source


от ellapt (6303 точки)


0

Задача 1

В лист от интиджъри парсвам въведените от конзолата стойности. При въвеждане на празен ред прекратявам четенето. Използвам функциите Sum() и Average() за пресмятането на съответните стойности.


от Dimov (907 точки)