Showing posts with label random. Show all posts
Showing posts with label random. Show all posts

Sunday, March 09, 2025

Efficient Code Repetition, Using Loops in C Programming

Loops can be described as key elements in programming, enabling the repetition of certain blocks of code while a condition is met. Most modern programmers couldn't imagine coding without loops. However, if you were to go back to 1972, in the earliest versions of the BASIC language, loops as we know them today did not exist in a structured form, and programmers relied on commands like GOTO or jump to control the program flow, including simulating loops. This was characteristic of the first iterations of BASIC, which was designed in 1964 by John Kemeny and Thomas Kurtz at Dartmouth College, with the goal of being simple for beginners.

However, was the GOTO command alone sufficient? Theoretically, the GOTO command is sufficient to simulate any loop because it is a Turing-complete mechanism – any control structure can be expressed with jumps and conditions. However, in practice, it was inefficient and prone to errors. That's why loops were introduced as a response to criticism, including Edsger Dijkstra's famous 1968 article, 'Go To Statement Considered Harmful,' which pointed out the problems of unstructured code.

In the C programming language, the loops: for, while, and do-while, existed from the very beginning, that is, from its creation in 1972, when Dennis Ritchie developed it at Bell Labs. The C programming language was designed as a successor to the B programming language, which itself was a simplified version of BCPL, and one of the goals was to provide a higher level of program flow control compared to its predecessors, while maintaining closeness to machine code.

Loops have always existed in the C programming language

Loops have always existed in the C programming language

Loops were an integral part of that design, so there was no moment in the history of the standard C programming language where they were absent. Unlike BASIC, which initially relied only on GOTO, the C programming language was designed with loops as a standard tool, inspired by higher-level languages like ALGOL, but adapted for low-level efficiency.

for: For iterations with a known number of repetitions.

while: For conditional loops where the condition is checked before execution.

do-while: For conditional loops where the condition is checked after execution.

In early versions, variable declaration within the for loop header was not allowed; variables had to be declared outside the loop. This changed with the C99 standard, which introduced block scope. With the ANSI C standard in 1989, known as C89/C90, loops were formally defined and have not undergone significant changes in later standards C99, C11, C17, and C23. All three loops have remained consistent in syntax and semantics, showing that Ritchie's design was robust from the very start.

Why Doesn't the C Programming Language Have a 'foreach' Loop, While C++ Has an Alternative?

Thursday, September 17, 2020

Klasa Random, biranje slučajnih brojeva u C# programskom jeziku

Najbolja stvar kod računara je što vas sluša. Kod njega nema ni levo ni desno, nego samo tačno kako ste mu naredili. Njegova akcija je uglavnom predvidljiva i kad ne dobijete od računara ono što očekujete to definitivno znači da ste vi pogrešili, a ne on. Ili nešto nije u redu na dubljem nivou!  Međutim, postoje situacije kad ćete hteti da računar bira jedan od više ponuđenih brojeva ili opcija. Na primer kada programirate igrice, kvizove, testove ili programirate Loto programe koji biraju brojeve umesto vas. Reći računaru da nešto izabere nije baš za njega jednostavan proces. Zato on ima specijalnu klasu Random, koja nasleđuje Object koji predstavlja generator pseudo slučajnih brojeva ili još preciznije Object koji sadrži algoritam koji stvara niz brojeva koji zadovoljavaju određene statističke zahteve za slučajnost. Zahvaljujući tome, biranje slučajnih brojeva u vašem programiranju jeste jednostavno. Vi čak ne morate ni da dodatno uvozite imenski prostor za ovu delatnost jer se Random klasa nalazi u System imenskom prostoru.  

( Random klasa je zadužena za bilo kakvo biranje slučajnih brojeva )

Da stvar bude još jednostavnija, korišćenje naredbe Random u C# programskom jeziku je mnogo jednostavnije nego u C ili C++ programskom jeziku. Metoda Next() je preklopljena i njene druge verzije vam omogućavaju da odredite minimalnu i maksimalnu vrednost opsega. Ona podrazumevano vraća pozitivan integer u opsegu od 0 do maksimalne vrednosti Int32. Ali ako odredite opseg od jednog broja do drugog, možete birati i negativne brojeve. Na primer ako hoćete da birate broj između -100 i 101 onda će te inicijalizovati metodu ovako. 

Random rnd = new Random();

rnd.Next(-100, 101);

I to je sve. I ako imate potrebu da birate više puta, dovoljno je da koristite istu rnd promenjivu čak i sa drugačijim postavkama. Nema potrebe da razmišljate da će svaki put kad izvršite ovaj kod da dobijate isti broj jer podrazumevani konstruktor za klasu Random dodeljuje generatoru slučajnih brojeva početnu vrednost koja je vremenski zavisna, tako da se smanjuje sekvenca biranja istih brojeva. Klasa Random sa njenom metodom Next() je sasvim dovoljna da precizno radite testove, iako su u nekim projektima uključeni razne vrste algoritma da bi slučajni broj bio dodatno naizmeničan broj.

Kako da napravim jednostavan program za izvlačenje Loto brojeva?

Saturday, December 05, 2015

Biranje slučajnih brojeva, Random u C# programskom jeziku


U programskim jezicima ne postoji slučajnost ili izaberi šta god hoćeš. Sve je savršeno precizno i tačno se zna šta će koja naredba izvršiti. Međutim i jedna od najvećih potreba u pravljenju igrica je da kompjuter sam nasumično izabere jednu od ponuđenih opcija. Npr. kad pravite kompjutersku igricu u kojoj objekti lete prema vama, imaće te potrebu da se objekti i pored toga što se primiču i uvećavaju prema vama da program sam odluči da li objekat se pomera u levo ili desno. Tako i stotine sličnih situacija i detalja u igrici moraju da biraju jednu od više opcija nasumično. Inače bi svaki pokret igrice kad god se pokrene uvek bio isti i vi bi ste tačno znali unapred svaki potez igrice koji će se desiti. Drugi, očigledniji primer je loto. U Srbiji se za jednu kombinaciju bira 7 brojeva od 1 do 39. Da bi računar mogao da nasumično bira brojeve, skoro svi programski jezici u kojem programirate mora da sadrži pseudo generatore biranja slučajnih brojeva.


( Random, pseudo generator biranja brojeva se koristi najviše u igrama na sreću )

U C# programskom jeziku, pseudo generator biranja slučajnih brojeva je klasa Random, koja se već nalazi u imenskom prostoru System, tako da nemate potrebe da naknadno uvozite klasu u vaš program kako bi ste je mogli koristiti. Korišćenje naredbe Random u C# programskom jeziku je mnogo jednostavnije nego u C ili C++ programskom jeziku. Metoda Next() je preklopljena i njene druge verzije vam omogućavaju da odredite minimalnu i maksimalnu vrednost opsega. Ona podrazumevano vraća pozitivan integer u opsegu od 0 do maksimalne vrednosti Int32. Ali ako odredite opseg od jednog broja do drugog, možete birati i negativne brojeve. Npr. ako hoćete da birate broj između -100 i 100 onda će te inicijalizovati metodu ovako.

Random rnd = new Random();
rnd.Next(-100, 101);

Nema potrebe da razmišljate da će svaki put kad izvršite ovaj kod da dobijate isti broj jer podrazumevani konstruktor za klasu Random dodeljuje generatoru slučajnih brojeva početnu vrednost koja je vremenski zavisna, tako da se smanjuje sekvenca biranja istih brojeva. Klasa Random sa njenom metodom Next() je sasvim dovoljna da precizno radite testove, iako su u nekim projektima uključeni razne vrste algoritma da bi slučajni broj bio dodatno naizmeničan broj.

Kako da napravim jednostavan program za izvlačenje loto brojeva?