Софтуерно Инженерство
Loading...
SvilenPavlov avatar SvilenPavlov 8 Точки

Възможно ли е:For цикъл за вкарване на числа - всяко в отделен тип?

Здравейте, приятели!

Как можем да приписваме инпут стойност на определен вид променлива в зависимост от размера и точността, с цел ефективно използване на паметта на PC? Пример: Инпута е:5, 3.555555, 1444141444114411414141414, и 0.5. Иска ми се да мога в самия фор цикъл да ги слагам във възможно най-малкия тип - 5 =инт, 3.55555=флоут, 1444141444114411414141414=децимал и т.н. Има ли аджеба такава магия, мои друзя?

Благодаря предварително!

Тагове:
0
Technology Fundamentals 08/07/2016 11:09:06
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки
Best Answer

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

Ти за какво устройство пишеш, че ти трябва пестене на памет? За всичко с по-високи параметри от пейджър, няма да прескочиш паметта с типове данни.

Иначе аз това което виждам е:

    1. Пробваш да вкарваш променливата в най-малкия тип данни. Хващаш евентуални грешки

    2. Ако хванеш грешка за препълване на типа данни, опитваш да вкараш стойността в друга променлива от по-висок тип данни. Хващаш грешки и там.

    3. Повтаряш операцията от т1. и т2. с по-висок тип данни докато стойността не се запише някъде.

 

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

Избирането на най-малкия тип обикновено се прави когато имаш ясно разбрани ограничения. Т.е. състоянието на нещо може да е само нула или едно - значи тогава ще ползваш boolean. Нещо може да е само от 0 до 100 - byte. И си сигурен, че няма да се прескочи този тип данни впоследствие. Ако си оставил потребителят да избира стойностите и ограниченията вече си сложил главата в торбата. Програмата няма ясно дефинирани ограничения за паметта, която ще ползва, а пък е memory-sensitive. Какво пречи на потребителят да въвежда само decimal-и докато не ти препълни паметта?

3
08/07/2016 11:23:19
SvilenPavlov avatar SvilenPavlov 8 Точки

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

0