
Programiranje u C-u - od svega pomalo


...
Nisi procitao moj post s razumijevanjem - eksplicitno sam pojasnio to sto si naknadno pitao:
...
Khm, stvar je u tome što nisam uopće pročitao :). Samo preletio (očito nedovoljno). NHF, sve je ok sad.

Evo pa da oživim temu.
Kako se u c++u napravi kao u BASICu ovo:
RANDOMIZE TIMER
X=INT(RND*10)
Znam da donja linija izgleda ovako:
int x=rand();
Ali me zanima kako naredba RANDOMIZE TIMER izgleda u C++u?
Hvala! ;)

Evo pa da oživim temu.
Kako se u c++u napravi kao u BASICu ovo:
RANDOMIZE TIMER
X=INT(RND*10)
Znam da donja linija izgleda ovako:
int x=rand();
Ali me zanima kako naredba RANDOMIZE TIMER izgleda u C++u?
Hvala! ;)
Trebas samo "seed"-ati rand( ) funkciju, a cesto se to radi upravo vremenom.

Trenutno u svojim igrama koristim GOTO naredbu..
Ima li neka bolja?
ZZ

Trenutno u svojim igrama koristim GOTO naredbu..
Ima li neka bolja?
ZZ
Koristiš while, switch, if-else...
Ubuduće prije postanja ovakvih pitanja proguglaj malo.

Trenutno u svojim igrama koristim GOTO naredbu..
Ima li neka bolja?
ZZ
Koristiš while, switch, if-else...
Ako koristi GOTO onda vjerojatno vec i koristi neke komande za uvjetno grananje. Ono sto njemu treba je restrukturiranje kôda i promjena nacina razmisljanja.
Beno101 daj neki primjer gdje bi inace koristio GOTO i pokazat cemo ti kako da napravis to isto bez GOTO-a

Trenutno u svojim igrama koristim GOTO naredbu..
Ima li neka bolja?
ZZ
Koristiš while, switch, if-else...
Ako koristi GOTO onda vjerojatno vec i koristi neke komande za uvjetno grananje. Ono sto njemu treba je restrukturiranje kôda i promjena nacina razmisljanja.
Beno101 daj neki primjer gdje bi inace koristio GOTO i pokazat cemo ti kako da napravis to isto bez GOTO-a
eto:
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int x=0;
cin >> x;
if (x==1) goto igra;
if (x==2) goto kraj;
igra:
printf ("IGRA");
kraj:
printf ("KRAJ");
return 0;
}

eto:
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int x=0;
cin >> x;
if (x==1) goto igra;
if (x==2) goto kraj;
igra:
printf ("IGRA");
kraj:
printf ("KRAJ");
return 0;
}
Ovako to napravi
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int x=0;
cin >> x;
if (x==1)
{
printf("IGRA");
}
if (x==2)
{
printf("KRAJ");
}
return 0;
}

A zašto ne bi koristio GOTO, mislim, što je loše?

A zašto ne bi koristio GOTO, mislim, što je loše?
Zato sto veoma ruzno izgleda i tesko je pratiti kad se stvari zakompliciraju. Kôd doslovce skace s jednog mjesta na drugo. Vidjet ces kad budes napisao nesto malo kompliciranije, goto vamo, goto tamo, pa goto opet natrag, pa goto izmedu ona prva dva, pa goto natrag, zavrti ti se u glavi od svega toga...

Ovako to napravi
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int x=0;
cin >> x;
if (x==1)
{
printf("IGRA");
}
if (x==2)
{
printf("KRAJ");
}
return 0;
}
a mogao bi i sa switch naredbom
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int x = 0;
cin >> x;
switch(x)
{
case 1:
printf("IGRA");
break;
case 2:
printf("KRAJ");
break;
default:
break;
}
return 0;
}

Pozdrav ekipa!
Došao sam do male prepirke sa mojim učiteljem iz tehničke kulture.
Ja robotičar i nadam se budući programer sam prisiljen "programirati" u RoboPro-u, što ja ne smatram programiranje već crtanje dijagrama toka.
Možete li mi molim vas reći postoji li mogućnost da robota upravljam(na USB interface) pomoću C/C++a?
Hvala!

A zašto ne bi koristio GOTO, mislim, što je loše?
Na FER-u se za korištenje goto naredbe momentalno pada ispit. Eventualno, ali eventualno gdje bi ti goto mogao proći je višestruki break (iako se i tu petlje daju tak složiti da breakaju bez goto-a). Goto je nešto što preziru svi programeri (i nešto što bi svatko ko se smatra programerom trebao prezirati). To ti je ono, ultimativno zlo u programiranju (bar u C-u). Na netu imaš cijele eseje i romane zašto je goto loš i zašto ga ne koristiti. Uglavnom, nemoj ga koristiti osim u nužnom zlu. Imaš for, while, do-while od petlji, te if, switch što se tiče uvjetnog grananja. S tim možeš sve napraviti.
Što se tiče programiranja robota. Daj malo više informacija? Kak se to programira taj robot? Staviš mu čip u programator ili? Što fali RoboPro-u? I dijagrami toka su programiranje! Niti jedan program se ne ide raditi bez razrade dijagrama toka i plana što točno treba raditi. Smatram da je bolje da se RP-a držiš, jer pravo, čisto programiranje robota od nule, ima tu previše posla. I asemblera.

A zašto ne bi koristio GOTO, mislim, što je loše?
Na FER-u se za korištenje goto naredbe momentalno pada ispit. Eventualno, ali eventualno gdje bi ti goto mogao proći je višestruki break (iako se i tu petlje daju tak složiti da breakaju bez goto-a). Goto je nešto što preziru svi programeri (i nešto što bi svatko ko se smatra programerom trebao prezirati). To ti je ono, ultimativno zlo u programiranju (bar u C-u). Na netu imaš cijele eseje i romane zašto je goto loš i zašto ga ne koristiti. Uglavnom, nemoj ga koristiti osim u nužnom zlu. Imaš for, while, do-while od petlji, te if, switch što se tiče uvjetnog grananja. S tim možeš sve napraviti.
Što se tiče programiranja robota. Daj malo više informacija? Kak se to programira taj robot? Staviš mu čip u programator ili? Što fali RoboPro-u? I dijagrami toka su programiranje! Niti jedan program se ne ide raditi bez razrade dijagrama toka i plana što točno treba raditi. Smatram da je bolje da se RP-a držiš, jer pravo, čisto programiranje robota od nule, ima tu previše posla. I asemblera.
Šta više informacija?
U BASICU to kolega radi:
OUT 888,16
OUT 888,8
itd...
Mene zanima dali je to moguće napravit u Cu?

Koje informacije?! LOL, pa sve! Koji čip, kakvo adresiranje, memorijski sustav, protočne arhitekture? Vanjski sklopovi? UART, GPIO? Kakav robot uopće? Robotska ruka? Što točno?
Super. Šta ti je to 888,16? Koordinate?
EDIT: Aha, malo sam proguglal, tu OUT naredbu. Kolko sam skužil šalje na paralelni port tu adresu neku, nešto nemam pojma. Kolko ja znam u C-u nema ničeg sličnog, trebal bi neki API srediti ili naći negdje library pa includeat. U asembleru bi znal to napraviti, ako je na ARM-u, možda i na kojem drugom procesoru, samo bi dokumentaciju trebal proučiti...

eto:
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int x=0;
cin >> x;
if (x==1) goto igra;
if (x==2) goto kraj;
igra:
printf ("IGRA");
kraj:
printf ("KRAJ");
return 0;
}
Ovako to napravi
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int x=0;
cin >> x;
if (x==1)
{
printf("IGRA");
}
if (x==2)
{
printf("KRAJ");
}
return 0;
}
Zapravo, ova dva koda neće dati isti rezultat. U prvom će u slučaju da je x = 1 ići na igra, ispisati IGRA, pa će se program od tu nastaviti izvršavati i ispisati još i KRAJ. Isto tako, ako je X različit i od 1 i od 2, ispisati će se obe riječi.
Identičan program bi bio:
#include <cstdio>#include <iostream>using namespace std;int main(){ int x=0; cin >> x; if (x!=2) { printf("IGRA"); } printf("KRAJ"); return 0;}

Šta više informacija?
U BASICU to kolega radi:
OUT 888,16
OUT 888,8
itd...
Mene zanima dali je to moguće napravit u Cu?
Naravno da je moguce, koristis inline assembly u C-u. Ali ima jedna kvaka, Windowsi s NT jezgrom ne dozvoljavaju direktan pristup hardwareu obicnim aplikacijama. Morao bi napisati driver koji bi radio na ring0 razini zajedno s kernelom.
Primjer inline assemblija za GCC koji salje broj 16 na port 888:
int main()
{
short port=888;
char data=16;
__asm__("movw %0, %%dx;
movb %1, %%al;
outb %%dx, %%al"
:
: "g"(port) , "g"(data)
: "eax", "edx");
return 0;
}
Nazalost, GCC koristi nadasve odvratnu AT&T sintaksu koju ne znam bas dobro, pa je moguce da sam ovdje nesto i fulao...
EDIT: sad vidim da si spominjao i USB programiranje. E za to ce ti, izmedu ostalog, trebati i poznavanje rada USB chipseta i signalizacije, nije to bas malo posla. Pretpostavljam da bi dio USB komunikacije u toj cijeloj prici uvelike nadmasio kolicinu kôda samog robota. Ako to u tim godinama mozes izvesti, ja bih na tvom mjestu ozbiljno razmislio o radu na linux driverima. FOSS zajednici veoma trebaju takvi genijalci...

Zapravo, ova dva koda neće dati isti rezultat. U prvom će u slučaju da je x = 1 ići na igra, ispisati IGRA, pa će se program od tu nastaviti izvršavati i ispisati još i KRAJ. Isto tako, ako je X različit i od 1 i od 2, ispisati će se obe riječi.
Identičan program bi bio
Ocito mi je nesto promaklo...
nisam ni gledao sto tocno radi, samo sam pretpostavio sto zeli postici.

Pozdrav ekipa!
Došao sam do male prepirke sa mojim učiteljem iz tehničke kulture.
Ja robotičar i nadam se budući programer sam prisiljen "programirati" u RoboPro-u, što ja ne smatram programiranje već crtanje dijagrama toka.
Možete li mi molim vas reći postoji li mogućnost da robota upravljam(na USB interface) pomoću C/C++a?
Hvala!
Hehe... i ja sam se bavio sa robo pro cijelo prvo polugodiste ove skolske godine, pisao sam program i funkcije za automatsko upravljanje dizalice i senzorsko-automatsko kretanje vozila i onda sve to smo na rucno upravljanje napravili lemljenjem obicnih tipki na plocicu i pravili smo daljinski za dizalicu i onda smo od palice za pc napravili upravljac za vozilo i to sve sam morao "isprogramirati" u robo pro sucelju koji podrzava samo slicice tj dijagram toka, a ne i varijable ili bilo sta kompliciranije pa sam i sam trazio neko resenje ali dok ga nisam nasao vec sam sve isprogramirao u tom programu..... ali evo da nepricam vise Off topic evo ti jedan link do njihove stranice na kojem imas razlicite .dll i biblioteke za koristenje sa raznim programskim jezicima, nezz da li ce ti to pomoci(znam da meni nije) ali kad te to vec zanima evo link. Tu moras jos i da nadjes za specifican kontroler njegovu biblioteku, a ako nema pogledaj tu oko te stranice mora biti jos negdje za download datoteka samo nezz gdje....

Pozdrav ekipa!
Baš sam rješavao neki zadatak, tj. više njih...
Prva 2 sam riješio bez problema, ali je naravno tu i treći...
Princeza se jednog dana šetala kraj jezera i ugledala svog omiljenog žapca kako skače izmeñu četiri lopoča.
Odmah ga je poželjela poljubiti da ga pretvori u kraljevića. Suočena je s problemom, ona želi do žapca stići
što je moguće prije, ali ne zna do kojeg lopoča treba plivati jer on stalno skače s jednog na drugi.
Promatrajući s ruba bare princeza je uočila da žabac skače meñu lopočima redom od prvog prema
zadnjem pa zatim ponovno nazad prema prvom (1, 2, 3, 4, 3, 2, 1, 2, 3...). Nju zanima gdje će se žabac
nalaziti nakon T skokova da bi mogla što prije stići do njega. Zamolila je vas da joj pomognete pronaći
izgubljenu ljubav, a tko može odbiti lijepu princezu...
Ulazni podaci:
− cijeli broj T (0 ≤ T ≤ 1000), broj skokova koje je žabac napravio.
Izlazni podaci:
− prirodan broj L, redni broj lopoča na kojem se žabac nalazi nakon T skokova.
Ne tražim da ga riješite već pomoć pri rješavanju..
Nez kako da riješim ovo trenutno mjesto, tj. trenutno lopoč...
Hvala na bilo kakvoj pomoći!

zapravo je dosta jednostavno :D
polje=[ 1 2 3 4 3 2]
L=polje[T%6]
Kako sam došao do toga?
Vidimo da se žabac kreće stalno isto, i da stalno radi ciklus 1 2 3 4 3 2 i onda ide ispočetka. To stavimo u polje i vidimo da ono što će dati T/duljina_ciklusa neće utjecati ne njegov položaj, to samo određuje koliko puta je prošša 1 2 3 4 3 2. Ono što nas zanima su oni koraci koji su preostali, a to je T%6. Polje smo napravili tako da ako je žabac napravio k skokova, nalazi se na polje[k] (k=0,1,..,5 što su jedini ostaci pri dijeljenju sa 6)
Mislim da bi trebalo bit ok :D

Pozdrav svima!
Može li netko molim vas nać grešku u ovom kodu?
HVALA!
#include <cstdio>
#include <cstring>
int main () {
char r1[10];
char r2[10];
char r3[10];
char r4[10];
char r5[10];
char tipka[10];
scanf ("%s %s %s %s %s",r1,r2,r3,r4,r5);
if (r4="#...#") puts (tipka, "KVADRAT");
printf ("%s",tipka);
return 0;
}

Pozdrav svima!
Može li netko molim vas nać grešku u ovom kodu?
HVALA!
#include <cstdio>
#include <cstring>
int main () {
char r1[10];
char r2[10];
char r3[10];
char r4[10];
char r5[10];
char tipka[10];
scanf ("%s %s %s %s %s",r1,r2,r3,r4,r5);
if (r4="#...#") puts (tipka, "KVADRAT");
printf ("%s",tipka);
return 0;
}
Boldano je. Prvo u C-u ne mozes direktno usporedivati stringove na taj nacin, moras koristiti strcmp ili nesto slicno. I drugo koristis samo jedan znak jednakosti '=', to u C-u predstavlja dodjeljivanje vrijednosti varijabli. Znaci ovo sto ti trenutno radis je da varijabli r4 dodjeljujes vrijednost "#...#". Vjerojatno to nisi planirao :D
Za provjeru jednakosti moras koristiti dva znaka jednakosti '=='
npr.
if (a==3)
{
...
Isto tako nije mi bas jasno sto tocno pokusavas postici sa ovim kôdom.
Za provjeru jednakosti stringa sa nekim drugim stringom koristis ovako nesto:
char test[]="lol"
if (strcmp(test, "lol")==0)
printf("stringovi su jednaki");
Da bi saznao sto tocno strcmp radi potrazi na internetu referencu (ukratko funkcija vraca broj nula ako su oba stringa jednaka)...

Pozdrav svima!
Može li netko molim vas nać grešku u ovom kodu?
HVALA!
#include <cstdio>
#include <cstring>
int main () {
char r1[10];
char r2[10];
char r3[10];
char r4[10];
char r5[10];
char tipka[10];
scanf ("%s %s %s %s %s",r1,r2,r3,r4,r5);
if (r4="#...#") puts (tipka, "KVADRAT");
printf ("%s",tipka);
return 0;
}
Boldano je. Prvo u C-u ne mozes direktno usporedivati stringove na taj nacin, moras koristiti strcmp ili nesto slicno. I drugo koristis samo jedan znak jednakosti '=', to u C-u predstavlja dodjeljivanje vrijednosti varijabli. Znaci ovo sto ti trenutno radis je da varijabli r4 dodjeljujes vrijednost "#...#". Vjerojatno to nisi planirao :D
Za provjeru jednakosti moras koristiti dva znaka jednakosti '=='
npr.
if (a==3)
{
...
Isto tako nije mi bas jasno sto tocno pokusavas postici sa ovim kôdom.
Valjam se po podu i smijem se...
Kak to nisam skužil...
A šta ćeš....
Hvala ti!
To je jedan zadatak koji rješavam....

Opet neće!
/usr/include/stdio.h: In function ‘int main()’:
/usr/include/stdio.h:688: error: too many arguments to function ‘int puts(const char*)’
plejka.cpp:11: error: at this point in file

/usr/include/stdio.h: In function ‘int main()’:
/usr/include/stdio.h:688: error: too many arguments to function ‘int puts(const char*)’
plejka.cpp:11: error: at this point in file
Ako pogledas referencu za puts, shvatit ces zasto ne radi. Funkcija prima samo jedan argument!
napravi ovako:
printf("%s KVADRAT", tipka);

/usr/include/stdio.h: In function ‘int main()’:
/usr/include/stdio.h:688: error: too many arguments to function ‘int puts(const char*)’
plejka.cpp:11: error: at this point in file
Pa normalno da neće, vidiš kaj ti veli. Previše argumenata predaješ f-ji puts. Još ti je i napisal deklaraciju f-je:
int puts(const char* str) - str sam ja dodal
tj. to je f-ja koja ispisuje na stdout (obično monitor) string na koji pokazuje pointer str, a ti toj f-ji si dodal i neki "KVADRAT".
EDIT: rustweaver me pretekel... *sigh* :)

/usr/include/stdio.h: In function ‘int main()’:
/usr/include/stdio.h:688: error: too many arguments to function ‘int puts(const char*)’
plejka.cpp:11: error: at this point in file
Ako pogledas referencu za puts, shvatit ces zasto ne radi. Funkcija prima samo jedan argument!
napravi ovako:
printf("%s KVADRAT", tipka);
No kak da onda u string tipka stavim rijec KVADRAT??

No kak da onda u string tipka stavim rijec KVADRAT??
A to ti zapravo zelis!!
char tipka[] = "KVADRAT";
ili ga mozes kopirati pomocu strcpy
#include <string.h>
...
strcpy(tipka,"KVADRAT");
Pod Linuxom cini se da boje mozes mijenjati koristeci odredjenu escape sekvencu kod ispisa tekst: http://www.linuxquestions.org/questions/programming-9/changing-text-color-in-c-172930/
Probao sam to pod Windowsima u DevC++-u, ali ne radi.
Moglo se to i u cistom DOS-u nekoc, koristeci ansi.sys driver. Windowsi sa NT jezgrom ne emuliraju dovoljan dio DOS-a da bi to funkcioniralo, a ansi.sys driver se vec odavno ne isporucuje sa microsoftovim operativnim sustavima.