» »

Izris zvezdic v C

Izris zvezdic v C

1
2
»

Janac ::

	printf("-------->IGRA NASPROTNIK\n");
	
	printf("Imam stevilo med 1-100, zacni ugibati!\n");
	scanf("%i", &iPoskus);
	
	if(iPoskus>iVnos-15)
	{
		printf("hladno");
	}
	
	else if(iPoskus<iVnos-15 && iPoskus>iVnos-6)
	{
		printf("toplo");
		
	}
	else if(iPoskus>iVnos-5)
	{
		printf("vroce");
		
	}
	else if(iPoskus==iVnos)
	{
		printf("Uganili ste!");
		
	}
	
    }
	while(!(iPoskus==iVnos));


So tole prav napisani pogoji?

1. hladno, če je poskus več kot 15 proč
2. toplo, če je odstopa med 14-6
3. vroče, če je poskus oddaljen več kot za 5.

Hvala...

jizzer ::

Primer da je vnos 75. Če si izbereš da je hladno, naprimer 30 števil vstran, moraš to upoštevati iz obeh strani torej, če je manjše od 45 in večje od 105. Za toplo pa naprimer 15 števil okoli, je to med 45 in 60 in zgoraj med 80 in 105.

Upoštevaj to in še enkrat napiši pogoje :)

Jakkob ::

In kaj se zgodi če ugibam popolnoma mimo in napišem 0, ali -200?

Janac ::

Jakkob je izjavil:

In kaj se zgodi če ugibam popolnoma mimo in napišem 0, ali -200?

1. hladno, če je poskus več kot 15 proč

?

Jakkob ::

Janac je izjavil:

Jakkob je izjavil:

In kaj se zgodi če ugibam popolnoma mimo in napišem 0, ali -200?

1. hladno, če je poskus več kot 15 proč

?


Nisi objavil cele kode zato skepam da imaš iVnos hardcoded nekje zgoraj oz. ga generiraš tako, da ti vrne random cifro med 1 in 100. Torej če je recimo iVnos = 50, kateri 'if' mi ujame iPoskus = -1?

amacar ::

Sej to mu je že jizzer povedal, da more gledati v obe smeri, torej uporabiti absolutno vrednost razlike.

Janac ::

if(iPoskus>iVnos-15 || iPoskus>iVnos+15)
	{
		printf("hladno");
	}
	
	else if(iPoskus<iVnos-15 && iPoskus>iVnos-6)
	{
		printf("toplo");
		
	}
	else if(iPoskus>iVnos-5 || iPoskus>iVnos+5)
	{
		printf("vroce");
		
	}
	else if(iPoskus==iVnos)
	{
		printf("Uganili ste!");
		
	}


fixed8-)

Mah ne, ni še vredu.

Zgodovina sprememb…

  • spremenil: Janac ()

Janac ::

if(iPoskus>iVnos-15 || iPoskus>iVnos+15)


Ampak tole je prav kajne? Absolutna je + & - ...

Spura ::

Razliko ni treba v vsakem clenu racunat in tut ni treba v vsakem clenu ugotavljat ce se je nekdo zmotil navzgor al navzdol.
int razlika = iPoskus > iVnos ? iPoskus - iVnos : iVnos - iPoskus;
if (razlika > 15) { // hladno
} else if (razlika > 5) { // toplo
} else if (razlika == 0) { // uganili ste
} else { // vroce
}

Janac ::

Spura je izjavil:

Razliko ni treba v vsakem clenu racunat in tut ni treba v vsakem clenu ugotavljat ce se je nekdo zmotil navzgor al navzdol.

int razlika = iPoskus > iVnos ? iPoskus - iVnos : iVnos - iPoskus;
if (razlika > 15) { // hladno
} else if (razlika > 5) { // toplo
} else if (razlika == 0) { // uganili ste
} else { // vroce
}


Mi lahko samo nekdo razloži prvo vrstico? Kaj recimo pomeni ?

galu ::

Tako to gre.

Janac ::

Pišem tale program:

http://spiri.fmf.uni-lj.si/wikiji/Java/...

Napiši program, ki bo prebral dve celi števili, ugotovil, katero je večje in izpisal:
vsa števila med najmanjšim in največjim številom.
vsa števila med najmanjšim in največjim številom, ki delijo največje število.
vsa števila med najmanjšim in največjim številom, ki so soda in delijo največje število.
vsa števila med najmanjšim in največjim številom, ki so soda ali delijo največje število.



Sestavil sem tale algoritem:

if(iStevilo1>iStevilo2)
	{
		
		for(iStevec1=iStevilo2+1; iStevec1<=iStevilo1-1; iStevec1++)
		{
			printf("%i\n\n", iStevec1);
			iDeli=iStevilo1%iStevec1;
			iSodo=iDeli%2;
			
			if(iDeli==0 && iSodo==0 )
			{
				printf("%i", iStevec1);
			}
			
		}


Mi lahko prosim nekdo pove, kje je napaka? Zadnjo točko še nisem.

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

kaj pa je napaka? :)
Abnormal behavior of abnormal brain makes me normal...

Janac ::

Semantična :)

Ne izpiše nobenega števila, ki je sodo in deli število...

help?

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

kaj tocno ti pa izpise?
Abnormal behavior of abnormal brain makes me normal...

Janac ::

Izpiše mi samo števila med prvim in drugim številom...

Vesoljc ::

// mod operacija %, ti vraca ostanek deljenja,
// najbolj tipicen primer je ugotavljanje ali je stevilo sodo ali liho
// 1 % 2 = 1; 2 % 2 = 0; 3 % 2 = 1; 4 % 2 = 0; itd...

iDeli = iStevilo1 % iStevec1;
iSodo = iDeli % 2; // ???
Abnormal behavior of abnormal brain makes me normal...

Janac ::

Ce recimo delim 40 s 2 in ostane 0, vem da je stevilo sodo, ce je pa ostanek 1 pa liho...kaj tukaj ni ok?

Dam v drugo vrstico

iSodo=istevec/2

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

ja deljenje z 2 je ok. ampak kaj delis z 2? zgoraj si delil iDeli z 2.
to je tisto kar ti je ostalo od iStevilo1 % iStevec1, se pravi 0 ali pa 1.

iMin = iVnos1 < iVnos2 ? iVnos1 : iVnos2;
iMax = iVnos1 > iVnos2 ? iVnos1 : iVnos2;
for(int a = (iMin+1); a < iMax; a++)
{
   bool deljivo = (iMax % a) == 0;
   bool sodo = (a % 2) == 0;
   // print kar te zanima
}

Abnormal behavior of abnormal brain makes me normal...

Zgodovina sprememb…

  • spremenil: Vesoljc ()

Janac ::

Takole si mislil ane?

	if(iStevilo1>iStevilo2)
	{
		
		for(iStevec1=iStevilo2+1; iStevec1<=iStevilo1-1; iStevec1++)
		{
			printf("%i\n\n", iStevec1);
			iDeli=iStevilo1%iStevec1;
			iSodo=iStevec1%2;
			
			if(iSodo==0 )
			{
				printf("%i", iStevec1);
			}
			
		}
		
		
	}


No ni vredu...

izpis je takšen:



Ampak neko zaporedje je...

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

tako izpisovanje je cist adijo...
izpisi tako:
printf("%i ", iStevec1);
if(iSodo)
   printf("sodo ");
// preveri in izpisi se ostalo
printf("/n");


izpis bi moral bit tak:
6 sodo
7
8 sodo
9
10 sodo
itd...
Abnormal behavior of abnormal brain makes me normal...

Janac ::

	for(iStevec1=iStevilo2+1; iStevec1<=iStevilo1-1; iStevec1++)
		{
			iDeli=iStevilo1%iStevec1;
			iSodo=iStevec1%2;
			
			printf("%i\n", iStevec1);
			if(iSodo==0)
			{
   				printf("^zgornje stevilo je sodo^");
   				printf("\n");
   			}
				
			
			
		}



:D

Kako bi lahko izpisal sodo v isti vrstici?

No če pa dodam še en pogoj, če števec deli neko število se ne izpiše 0...tukaj je potem problem. Neko število deli drugo če je ostanek 0 je tako?

               iDeli=iStevilo1%iStevec1;
			iSodo=iStevec1%2;
			
			printf("%i\n", iStevec1);
			if(iSodo==0)
			{
   				printf("^zgornje stevilo je sodo^");
   				printf("\n");
   				
   				if(iDeli==0)
   				{
   					printf("^zgornje stevilo tudi deli prvo stevilo^");
   				}
   			}

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

kater IDE uporabljas?
Abnormal behavior of abnormal brain makes me normal...

Janac ::

Orwell Dev C++

8-)

Zakaj je to pomembno?

Zgodovina sprememb…

  • spremenil: Janac ()

Vesoljc ::

zato ker bi rad da se naucis debugat... postavi breakpoint v for loop, pa stepaj skozi, pa bos videl kje je napaka. vse variable vrzi v watch window, pa jih spremljaj
Abnormal behavior of abnormal brain makes me normal...

Janac ::

Vesoljc je izjavil:

zato ker bi rad da se naucis debugat... postavi breakpoint v for loop, pa stepaj skozi, pa bos videl kje je napaka. vse variable vrzi v watch window, pa jih spremljaj


Kako pa naj debugam, če je napak semantična in ne sintaktična?

Vesoljc ::

ja kdaj pa bos debugal? ko je sintax error in se ti sploh ne skompajla?
Abnormal behavior of abnormal brain makes me normal...

amacar ::

Ne vem no, ampak to so tako osnovne stvari, da ni potrebno za vsako spremembo postavljati vprašanja na slo-tech. Malo pretestiraš, če ustreza vsem pogojem in je to to. Ko sem jaz bil začetnik sem si kaj tudi na papir zapisal in tako dolgo gruntal, da mi je uspelo. In ja to je pomenilo tudi 2-3 ure za izris recimo šahovnice, ne pa da se vdaš po 2 poskusih brez da bi sploh premislil kaj si v kodo napisal.

#include <stdio.h>

int main()
{
    int stevilo1=10;
    int stevilo2=60;
    
    if(stevilo2>stevilo1)
    {
        int temp=stevilo1;
        stevilo1=stevilo2;
        stevilo2=temp;
    }
    
    if(stevilo1>stevilo2)
    {
        int i=0;
        for(i=stevilo2+1;i<stevilo1;i++)
        {
            printf("stevilo %i ",i);
            if(stevilo1%i==0 && i%2==0)
                printf("je sodo in deli!");
            printf("\n");
        }
    }
    return 0;
}

Janac ::

Hvala za pomoč... velikokrat res sploh ne razmišljam o problemu...

Mogoče je spet tak primer.

Imam tale algoritem, ki deluje!

#include <stdio.h>

int main (void)
{
	int iSrecno=0;
	int iVnos=0;
	int iOstanek=0;
	int dVsota=0;
	
	printf("Vnesi poljubno stevilo, izpisem stevke:\n");
	scanf("%i", &iVnos);
	
	while(iVnos>0)
	{
		iOstanek=iVnos%10;
		iVnos=iVnos/10;
	
		if(iOstanek!=0)
		{
			iVsota=iOstanek+iVsota;
		}
	}
	printf("%i", iVsota);
	
	return(0);
}


Deluje lepo, ko pa spremenim v:

iVsota=iOstanek*iVsota;


Izpiše 0, ne glede na podatkovni tip... dajte mi samo namig prosim.

amacar ::

Ker imaš iVsota nastavljeno na začetku na 0 in karkoli množiš z 0 bo vedno nič.
Nastavi na 1.

Janac ::

Pismo no, kako se nisem tega sam spomnil:8)

Zgodovina sprememb…

  • spremenil: Janac ()

SimplyMiha ::

Še veliko takih trenutkov bo, ne skrbi :)

Just keep on truckin'.
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vsota določenih elementov matrike [C]

Oddelek: Programiranje
101002 (690) RatedR
»

Izris lika - ideja

Oddelek: Programiranje
233772 (2807) RatedR
»

Resne težave z razumevanjem osnov programiranja (strani: 1 2 )

Oddelek: Programiranje
8016695 (13207) RatedR
»

Združevanje polj [C]

Oddelek: Programiranje
7994 (858) ragezor
»

Spreminjanje vrednosti v polju [C]

Oddelek: Programiranje
102185 (1984) specing

Več podobnih tem