Jump to content

Програмирање - дигресије

Оцени ову тему


Препоручена порука

пре 13 часа, Juanito рече

Најпре ми реци ово, пошто код мене не ради твој код (избацује гомилу syntax error-а). Да ли на крају добијаш 142.9, пошто не видим како би могао... Рекао бих да у овом твом коду мора негде око стотке да испадне. 

Dobijem 142.9

пре 12 часа, Juanito рече

Верзија у којој x повећаваш у телу петље је еквивалентна верији у којој га повећаваш у услову. Разлика је што си у другом случају унутар тела један корак иза, па мораш да додаш следећи (+ 0.7) кад рачунаш вишак. У Swift-у је бројач петље константан, не можеш да га промениш у телу, па сам одабрао други начин. У C#-у може и једно и друго и исто се добија. Можеш обе верзије да напишеш у PHP-у. 

Kada stavim incriment u uslov onda dobijem 143.

Ali kada pored toga dodam takođe onih 0.7 kao i ti pa bude ...$visak= $x+0.7 -100; ...  onda ispada 142.9.

Ne kapiram baš zašto smo jedan korak iza kada stavimo u telo petlje ... Mislim zar ne dodajemo sledeći 0.7 kada je incriment u uslovu?

Link to comment
Подели на овим сајтовима

@Tumaralo.

Може и мало једноставније са петљом for, чисто због примера а и није много практично извршавање превише "ифова" у петљи... Такође за "инкремент" можеш поставити $brojac++ који по дифоулту додаје +1 тако да ће истерати на 143 у петљи. 

<?php

	$brojac = 0;

	for ( $x = 0; $x <= 100; ) {
	    
	    $x += 0.7;

	    $brojac++;

	}
	    
	$broj_obrtaja = $brojac - ( $x -100 );
	 
	echo 'Broj prolaska: ' . $broj_obrtaja; // Prikazuje 142.9

?>

 

Link to comment
Подели на овим сајтовима

пре 8 минута, ИгорМ рече

@Tumaralo.

Може и мало једноставније са петљом for, чисто због примера а и није много практично извршавање превише "ифова" у петљи... Такође за "инкремент" можеш поставити $brojac++ који по дифоулту додаје +1 тако да ће истерати на 143 у петљи. 

<?php

	$brojac = 0;

	for ( $x = 0; $x <= 100; ) {
	    
	    $x += 0.7;

	    $brojac++;

	}
	    
	$broj_obrtaja = $brojac - ( $x -100 );
	 
	echo 'Broj prolaska: ' . $broj_obrtaja; // Prikazuje 142.9

?>

 

Чекај, у PHP-у је x дефинисано ван петље и има вредност коју је зарадило у петљи? 

Па то је ужас...

Link to comment
Подели на овим сајтовима

@ИгорМ

Ево како крштен језик реагује на то решење. 

35isi8g.jpg

У праву си да је елегантније решење да се увек дода цео корак и на крају одузме вишак, али за то је далеко боља while петља, тј. твоје прво решење где све променљиве дефинишеш ван петље. Ово са for петљом ради у PHP-у и вероватно нигде више. Јако је опасно. Мислиш да имаш посла с локалном променљивом, кад оно имплицитно глобална. confused1

Link to comment
Подели на овим сајтовима

пре 1 минут, Juanito рече

Мислиш да имаш посла с локалном променљивом, кад оно имплицитно глобална

Нарочито за неког ко тек учи па дође до колапса :) као мени када сам почео... Може се унсетовати после петље али је у суштини глупо, додатни код... Генерално избегавам фор петљу за слична решења. 

 

 

  • Волим 1
Link to comment
Подели на овим сајтовима

пре 6 часа, Tumaralo. рече

Dobijem 142.9

Kada stavim incriment u uslov onda dobijem 143.

Ali kada pored toga dodam takođe onih 0.7 kao i ti pa bude ...$visak= $x+0.7 -100; ...  onda ispada 142.9.

Ne kapiram baš zašto smo jedan korak iza kada stavimo u telo petlje ... Mislim zar ne dodajemo sledeći 0.7 kada je incriment u uslovu?

Додаје се 0.7 кад је инкремент у услову, али додаје након извршеног корака петље. Дакле, прво је x = 0, па се изврши једном тело петље јер је 0 < 100, па се тек онда дода 0.7 на x и циклус се понавља. Зато у датом кораку мораш да додаш 0.7 кад рачунаш вишак јер x касни један корак у односу на оно што имаш у глави. У суштини, проблем је што for петља није баш најбољи избор за овај и сличне проблеме.

Боље је ово Игорево решење са while петљом, ту нема никаквих забуна. 

 

Link to comment
Подели на овим сајтовима

Ка је та "for" петља у питању, многи језици омогућавају да се у услов стави било шта, или ништа. Виђао сам "досетљиве" програмере како уместо у тело, читав алгоритам сместе у заглавље што им изгледа много "паметно", а у ствари направе проблеме које је после мора неко да решава.

Зато, моја препорука је да се "for" петља користи само у најосновнијем облику:

for (int i = 0; i < n; i++)

Може и "уназад" са i-- и никако другачије. За све друго користити while или слично.

Link to comment
Подели на овим сајтовима

пре 10 минута, Grizzly Adams рече

Ка је та "for" петља у питању, многи језици омогућавају да се у услов стави било шта, или ништа. Виђао сам "досетљиве" програмере како уместо у тело, читав алгоритам сместе у заглавље што им изгледа много "паметно", а у ствари направе проблеме које је после мора неко да решава.

Зато, моја препорука је да се "for" петља користи само у најосновнијем облику:

for (int i = 0; i < n; i++)

Може и "уназад" са i-- и никако другачије. За све друго користити while или слично.

То је управо логика дизајна Swift-a. Swift чак нема такву for петљу, већ само for in, што је еквивалентно C# foreach.

Ако ти заиста треба да прођеш кроз секвенцу бројева, онда урадиш буквално то - креираш дату секвенцу и прођеш кроз њу. Функција stride креира секвенцу еквивалентну тој горе:

stride(from: 0, to: n - 1, by: 0.7)

И онда можеш да користиш for петљу са том секвенцом:

for i in stride(from: 0, to: n - 1, by: 0.7) {

}

Мање је флексибилно од C-оликих петљи, али зато оставља много мање простора за грешке. Управо те тера да користиш while тамо где for није природно.

Link to comment
Подели на овим сајтовима

@ИгорМ

Koliko je potrebno otprilike da bih savladao php i mysql? Uglavnom ljudi kažu 6 meseci..

Na ovom kursu radimo samo osnove, završićemo ga za 2 nedelje pa planiram posle sam da slušam tutorijale, čituckam i uvežbavam sve šta treba. Mogao bih da izdvojim oko sat i po dnevno. Počeo bih sa ovim što je privremeno odsutni brat @Aquilius Cratus postovao ranije  :

 

Samo što je faktički ovo meni prvi programski jezik koji učim... :/

Link to comment
Подели на овим сајтовима

пре 50 минута, Tumaralo. рече

@ИгорМ

Koliko je potrebno otprilike da bih savladao php i mysql? Uglavnom ljudi kažu 6 meseci..

Na ovom kursu radimo samo osnove, završićemo ga za 2 nedelje pa planiram posle sam da slušam tutorijale, čituckam i uvežbavam sve šta treba. Mogao bih da izdvojim oko sat i po dnevno. Počeo bih sa ovim što je privremeno odsutni brat @Aquilius Cratus postovao ranije  :

 

Samo što je faktički ovo meni prvi programski jezik koji učim... :/

Само напред и не одустај. Можда има много да се учи и ради на томе али резултати ће доћи.

Зависи од посвећености, времена а највише практичних задатака и конкретног посла у ком се сусретнеш са конкретним проблемима. Имаш одличних књига и ваљало би их савладати поред видео туторијала... ако си добар са енглиш могао би ти проследити нешто од тога...

Иначе нема неког периода за који ће ти неко гарантовати да ћеш бити пхп нинџа... Кoд мене је било доста одрицања и много непреспаваних ноћи (као и данас уосталом ) па опет не смем да тврдим за себе да сам експерт.

Ја поред свега ( HTML,CSS3, jQuery,PHP,MySQL) још доста времена проводим са WordPress-ом који је заснован на пхп-у (прављење темплејта и плугинова)... и још увек се учим... Много ми помажу видео туторијали професионалаца. Ту се види практично знање и "пропер веј" како нешто треба да се одради. Мада ми набију комплекс када их видим како то они раде брзо али шта да радим, одабрао сам пут... и ја ћу тако једног дана када порастем :D

Јако битна ствар, одлично савладати класе, функције и низове... без тога нема озбиљно одрађеног посла. За све друго ту је брат гугл када затупим :) ... и наравно https://stackoverflow.com/ где вероватно већ имаш одговор на још не постављено питање како нешто да изведеш

Link to comment
Подели на овим сајтовима

@Grizzly Adams @ИгорМ

А овако некако би изгледало решење без променљивих (само константе да би било читљивије), без петље и без услова у сваком кораку. Functional programming rules! :)

GoyZzqH.jpg

Link to comment
Подели на овим сајтовима

пре 9 минута, Grizzly Adams рече

А још једноставније изгледа на језику пројект менаџера:

I want that done by Friday. :smeh1:

Ево ти пре рока, овога пута и без константи. :ani_biggrin:

owa0xjK.jpg

Link to comment
Подели на овим сајтовима

Придружите се разговору

Можете одговорити сада, а касније да се региструјете на Поуке.орг Ако имате налог, пријавите се сада да бисте објавили на свом налогу.

Guest
Имаш нешто да додаш? Одговори на ову тему

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Чланови који сада читају   0 чланова

    Нема регистрованих чланова који гледају ову страницу

  • Сличан садржај

    • Од Давор73,
      Има ли кога да се бахће са Пајтоном?  Планирам да по трећи пут кренем из почетка, мада сам својевремено био дошао до класа али сам направио за мене већу паузу тако да...Ако је неко вољан за размену мишљења, искуства, заједничко учење  нека цимне. Иначе тотални сам почетник и ово ми је први језик тако да ми аналогије са неким другим језицима за сада нису од користи.
    • Од Juanito,
      Уз једну важну разлику...

    • Од Grizzly Adams,
      За оне који су завршили лекцију бр. 1 следи наставак.
      Почећемо са малом причицом, молим за пажњу и стрпљење.
      Замислите да правимо игрицу, трку аутомобила. Значи, наш програм приказује на екрану аутомобиле различитих боја који се међусобно утркују:

      И онда имамо "зелени ауто", "црвени ауто" и "плави ауто". Е сад, они се разликују по боји, али осим тога имају пуно сличности - свима се управља на исти начин. Имају педалу за гас, кочницу, могу да скрену лево или десно.
      Замислите сада да је неко већ испрограмирао све што је потребно за "ауто" и да постоји некаква "фабрика" која може да нам у тренутку направи ауто било које боје. Онда би програмирање наше игрице било врло једноставно, на пример - у програмском језику Срб# то би изгледало овако:
         Направи нови зелени ауто.
         Направи нови црвени ауто.
         Направи нови плави ауто.

         зелениАуто.Убрзај();

         if (иде кривина улево) {
            црвениАуто.Кочи();
            плавиАуто.СкрениЛево();
         }
      Веома једноставно и лако за разумевање.
      Такав начин програмирања зове се "објектно програмирање" јер правимо некакве "објекте" и онда само њима "командујемо" шта да раде (слично као што "објекту" Console издајемо "команде" типа WriteLine(), ReadLine() и слично). Нажалост, програмски језици немају унапред уграђен тип "аутомобил" па морамо да га направимо сами. Тај нови тип податка "аутомобил" зове се "класа". То је као "упутство" за фабрику како се прави аутомобил, срећом - програмски језици имају уграђену "фабрику" која може у делићу секунде да направи колико год хоћеш аутомобила различитих боја. Само је прво потребно направити "упутство".
      Како се то ради може се прочитати овде: http://csharp.net-tutorials.com/classes/introduction/
      Очекујем пуно питања.
    • Од Grizzly Adams,
      Ко је завршио све са почетне теме, ово је наставак.
      На теми већ има један задатак ("Регистар каса"), овде да додамо још неке идеје шта би могло да се направи са знањем из првог поглавља ("The Basics"). Веома је битно испробати што више примера тако се сви концепти потпуно разјасне и стекне способност да се примене на практичне проблеме.
      У првом делу научили смо:
      Основне типове података и варијабле, Условне наредбе (if, switch), Петље (while, do-while, for, foreach), Функције и параметре, Низове (arrays). Сада све то треба применити на што више примера.
      За оне који су тамо завршили све што има, ево другог задатка - направити "калкулатор".

      Кад се отвори, програм прво пита само за број. Кад се унесе број, освежи се екран, прикаже унет број, онда се тражи операција - само један "карактер", може бити: '+', '-', '*', '/'.
      Затим поново тражи број. Када се унесе број, екран се освежава приказује операција, број и резултат као на слици изнад и тако у круг. Предлажем да овде употребите while, низове, функције и switch наредбу.
      -
      Ако имате још коју идеју за једноставан програм, слободно јавите!
    • Од Grizzly Adams,
      Ово је прва лекција, а овде можете да видите цео план овог нашег "курса":
      За почетак, потребан је Windows (може и Linux или други OS - погледај поруке испод) и знање како да се иде на интернет и инсталирају програми.
      Циљ ове прве лекције је да "пробијемо лед" и направимо најједноставнији могућ програм.
      1) Инсталирати Visual Studio Community Edition (бесплатно и легално)
      https://www.visualstudio.com/vs/community/
      При инсталацији одабери опцију ".NET Desktop Development":

      2) Отвори Visual Studio и пажљиво следи ово упутство:
      https://msdn.microsoft.com/en-us/library/k1sx6ed2.aspx
      Осим последњег дела (Command-Line Compilation and Execution), то ти не треба.
      Направио си свој први програм. Покушај да измениш поруку која се појављује на екрану - нпр. преведи на српски језик. Јави кад завршиш или ако не иде и треба помоћ.
      -
      Молим овде само конкретна питања везана за тему, све остало ће бити брисано без милости. Данке шен.
      Потребно је све укупно око 15 минута, ко не уради требало би да буде кажњен...
      ----------------------------------
      Кад се ово претходо успешно заврши, наставити овде:
      http://csharp.net-tutorials.com/basics/hello-world/
      Почиње са овим што смо већ урадили па наставља даље где треба. Пробајте да изгурате поглавље "The Basics" до краја и питајте одма шта није јасно. То је циљ ове "лекције бр. 1".
      ----------------------------------
      Када завршите прво поглавље, овде је задатак за "испит":
       
×
×
  • Креирај ново...