» »

vprasanje c++

vprasanje c++

marjan_h ::

mene pa zanima kako bi napisu kodo da bi samo takrat ko bi vpisu svoje ime, potrdu program da je pravilno ime... do zdej mam tko sam karkol napism mi potrdi da je pravilno


#include < iostream.h >
int main ()
{
int stojan;
cout < < "Vpisite svoje ime" < < endl;
cin >> stojan;
if (stojan)
cout < < "Vase ime je pravilno" < < endl;
else
cout < < "Napacno ime" < < endl;
system ("pause");
return 0;
}

MasterMind ::

int? Saj tvoje ime ni stevilo? in mimogrede. if (stevilo) bo true dokler ne bo spremenljivka stevilo 0. (seveda je stevilo številskega tipa).


Raje uporabi std::string ter v if stavku moraš primerjati z nečim. (stojan == "Stojan"), če uporabiš std::string. Recimo.
Gentoo, KDE uporabnik.

marjan_h ::

bom poskusu , hvala
sm komi zacel neki delat pa ne vem se vsega

MasterMind ::

Se vidi ;). Drugače pa, vsakdo enkrat začne.

Mimogrede da na hitro povem zakaj je std::string. std je namespace (na hitro rečeno, neke vrsta skupina (ne najdem druzga izraza :D )) medtem ko string je pa class. In :: je pa operator, ki pove da je desna stvar pripada levi stvari (malo bolj na hitro povedano).

Priporočam da si bolj podrobno pregledaš http://www.cplusplus.com/doc/tutorial/.
Gentoo, KDE uporabnik.

marjan_h ::

če dobr razumem daš namest int main () , std::string

Backup22 ::

Ojoj, priporočam ti kakšno knjigo za začetnike (C++ na kolenih je super!).

int main() je glavna funckija,
string, int, char, bool in podobno, pa so tipi spremenljivk.

Da ne rabiš vedno pisat std::cout ... , lahko narediš takole

#include <iostream>
using namespace std;

int main()
{
.....
}
} 
//

marjan_h ::

ja sej s številkami znam, sam ostalo pa še ne
pa eno c++ knjigo že mam , sam ne piše vsega kar bi hotu

Greg91 ::

Eden izmed načinov:

Zgodovina sprememb…

  • spremenil: Greg91 ()

marjan_h ::

jaz sem mal na drugačen način naredu pa dela, vseen hvala vrba
če pa ne bom še kej vedu bom pa kar tle vprašu :))

BigWhale ::

cim prej se navadite neuporabljati using namespace... ;)

Giller0 ::

kaj je std in kje ga v tem zadnjem primeru sploh potrebujemo? brez bi delalo enako..
Jow..

Zgodovina sprememb…

  • spremenil: Giller0 ()

Quikee ::

kaj je std
Namespace ukazov standardne knjižnice.

in kje ga v tem zadnjem primeru sploh potrebujemo?
Potrebuješ ga zaradi: cin, cout, string, endl

MasterMind ::

Če si includal iostream.h, ne rabiš (in tega ne includaj tako!). Drugače pa moraš includat iostream (brez .h). V tem primeru pa rabiš std določit.
Gentoo, KDE uporabnik.

Giller0 ::

zakaj ne iostream.h ? do zdaj sem vedno delal s to knjižico. v šoli tudi.
Jow..

marjan_h ::

poskušal sem še naprej in mi spet compiler opozori na errorje
kaj je tukaj narobe?


#include < iostream.h >
using namespace std;

int main ()
{
while (true)
{
system ("CLS");
cin.clear ();
int n;
std:: string stojan;
cout < < "Vpisite ime" < < endl;
cin > > stojan;
if (stojan== "Stojan")
cout < < "Vpisite stevilo" < < endl;
cin > > n;
cout < < "Stevilo je pomnozeno z 2 " < < n * 2 < < endl;
else
cout < < "Napaka! " < < endl;
system ("pause");
}
return 0;
}

MasterMind ::

Če imaš znotraj if več stavkov.. potrebuješ narediti blok stavkov. (dat use skp v {}). V tvojem primeru bi bilo.. if () { ...} else

seveda nove vrstice tam, kjer je potrebno. :)

Drugače pa... rabim poskusne zajčke za mojo skropucalo :D

linkec

Poglej pa povej, če ti kej pomaga :D. Se pa še izdeluje :)
Gentoo, KDE uporabnik.

Zgodovina sprememb…

marjan_h ::

ja , hvala zdaj dela :8)

BigWhale ::

Master,

> V tem primeru pa rabiš std določit.

Ne, lahko uporabljas kar std:: In to je v mal bolj kompleksnem projektu precej bolj zazeljeno, kot uporaba 'using namespace ... whatever;'

marjan_h ::

še neki mi ne uspe...

jaz sem dodal svojemu programu še en std::string, in sem naredu tako
std::string racunanje

pri cinput
cin > > stojan,racunanje;

pol pa še en if stavek pred else, in sem zopet primerjal
if (racunanje == "Racunanje")
cout < < "Zacetek racunanja" < < endl;

Zdej je pa vprašanje zakaj se pol ne izpiše "Zacetek racunanja" in se izpiše "napaka!",
če sem primerjal, in dodal pravilno kodo poskušal sem tudi z {}. Sam ne pomaga, je isto...

Gundolf ::

Prvičl, če daš kodo med taga [st.koda c++] in [/st.koda c++], ti ne bo treba delat presledkov med < < in > > .

Drugič:
> cin > > stojan,racunanje;

To si verjetno hotel napisati takole:
 cin >> stojan >> racunanje;

To je namreč način, da zaporedoma prebereš več podatkov. Kot začetnik se vejice v C++ izogibaj kot hudič križa. Sicer je veljaven operator (zato ne dobiš compiler errorja), ampak je zahrbten in četudi veš kaj pomeni in kje se uporablja se z lahkoto zafrkneš z njim. V tvojem primeru pa naredi nekaj popolnoma drugega, kot ti pričakuješ.

marjan_h ::

presledke delam zato, ker mi obravnava kot html kodo.

drgač pa sem zdej poskusu namest vejice > >.
in mi ubistu sam eno vrsto spusti.

Jaz pa hočm da mi ne spusti vrstice, ampak ko vpišem "Stojan" se mi mora pokazati novo besedilo, in ko vpišem "racunanje" spet neki druzga. Če pa ni nč od tega pa "Napaka!"

Gundolf ::

No saj jaz sem ti povedal, kako vneseš kodo v forum, brez da bi jo moral odpravljati dele, ki jih forum želi prevesti kot html.

Debugirat opisa tvoje kode se pa nažalost ne da. Se pravi, napiši kaj hočeš, da ti koda dela (napiši razumljivo), in tisti del kode, ki naj bi to naredil (tako da čimveč pomembnega konteksta opišeš in da količino kode ohraniš na minimumu). Potem bo pa koj kakšen koristen odgovor padu.

marjan_h ::

 #include <iostream.h>
using namespace std;

int main ()
{         
          while (true)
     {
          system ("CLS");
          cin.clear ();
    int n;   
    std::string racunanje;
    std::string stojan;
    cout << "Kaj zelite delati?" << endl;
    cout << "- Racunanje" << endl;
    cout << "- Stojan" << endl;
    cin >> racunanje >> stojan;
    if (racunanje == "Racunanje")
    {
                    while (true)
     {
          system ("CLS");
          cin.clear ();
    cout << "Program vam izracuna veckotnik" << endl;
    cout << "Vpisite stevilo" << endl;
    cin >> n;
    cout << "Trikotnik ima " << n * (n - 3) / 2 << " stranic" << endl;
    system ("pause");
    if (stojan == "Stojan")
    cout << "Vpisite kodo" << endl;
    }
    }
    else
    cout << "Napaka" << endl;
    system ("pause");
    }
    return 0;
}
  


evo to je celotna koda, jaz pa hočm tako da tist kar napišem se mi pol izpiše v novem oknu
recimo "racunanje" in se mi izpiše Program vam izracuna trikotnik..itd
sej to mi pokaže, samo zakaj pa pol če napišem Stojan se mi izpiše "Napaka"
primerju sem, dodal sem if stavek

MasterMind ::

Um... Ti rabiš dat samo v eno spremenljivko. Torej, naredi spremenljivko izbira (recimo) in poglej kakšno vrednost ima ta spremenljivka in naredi potem to kar želiš.
Gentoo, KDE uporabnik.

marjan_h ::

potem samo en std::string?

20sdfj093f ::

Priporočam SCHILDT - TEACH YOURSELF C++

LPD

Tutankhamun ::

int main(int argc, char* argv[])
{

	while (true)
	{
		system ("CLS");
		cin.clear ();
		int n;
		int izbira1, izbira2;

		/* meni izbire */
		cout << "Kaj zelite delati? Izberi stevilko" << endl;
		cout << "1. Racunanje" << endl;
		cout << "2. Stojan" << endl;
		cin >> izbira1;

		if (izbira1 == 1) // racunanje
		{
			while (true)
			{
				system ("CLS");
				cin.clear ();
				cout << "Program vam izracuna veckotnik" << endl;
				cout << "Vpisite stevilo: ";
				cin >> n;
				cout << "Trikotnik ima " << n * (n - 3) / 2 << " stranic" << endl;

				/* meni izbire */
				cout << "Koncaj racunanje?" << endl;
				cout << "1. Da" << endl;
				cout << "2. Ne" << endl;
				cin >> izbira2;
				if (izbira2 == 1)
					break;
			}
		}
		else if (izbira1 == 2) // stojan
		{
			cout << "Vpisite kodo" << endl;
			/*tuki se neki manka*/
		}
		else // napaka
		{
			cout << "Napaka" << endl;
		}

		system ("pause");
	}
    return 0;
}
AMD Phenom QUAD 9950 Black Edition, 8GB

marjan_h ::

Sej da ne bo kdo mislu da nimam knjige...
Jaz imam knjigo sam večina vaj kar delam po njej mi noče skompilat. Eno vajo sem celotno prepisu ven pa mi je javilo 4 napake..!? Pomagam si tud z cplusplus.com tako da osnove znam ostalo pa mi mora kdo pomagat.

Tutankhamun hvala , da si si vzel čas pa to popravu. Drgač sem mislu tako da not napišeš kar hočš, sam ne bom preveč kompliciral , pa nej bo številkah.

Pa drugič mi lahk sam poveste to kodo vstavi sem , zaradi tega... :D

Hardstyle ::

prepiši ono vajo sem pa da pogledamo.

Volk| ::

Da ne bom odpiral nove teme....

Problem...kaj sem zajebal?:(
const int velikost=50;

void Obrni(char niz[velikost])
{
	int k=strlen(niz);
	char temp[k];
	int j=k;
	for(int i=0; i < k;i++)
	{
		temp[j] = niz[i];
		j--;	
	}
	niz=temp;
}

void main()
{
	char niz[velikost]= "Dobro jutro, C++!";
	cout <<  niz<<endl; 
	Obrni(niz);
	cout<<niz;
} 
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

bozjak ::

napako si naredil, ko si zelel tabelo niz enaciti z tabelo temp. Ko imas tabelo znakov to ne gre tako, enacis lahko samo vsak znak posebej (tako kot zgoraj niz[j] = temp [j]) . Ko zelis prepisati cel niz znakov, naredi to v for zanki oz. uporabi funkcjo (ki naredi tocno to) strcpy(niz, temp). to fukncijo bos nasel v string.h

Lp
http://upor.blogec.si
http://bozjak.deviantart.com

Volk| ::

Ja, to je ena napaka. Ampak bolj me muci zakaj ne morem naredit "char temp[k];"
Saj je "k" int in bi lahko s tem dolocil velikost polja! zakaj bi uporabljal vec spomina ce ga rabim samo toliko koliko je dolg niz.

bozjak ::

ker v C-ju po defaultu nimas dinamicnih tabel. Ce res hoces narediti dinamicno tabelo je najbolj simpl da to naredis z operatorjem new, torej:

char * bla = new char [x];

Ampak pazi, tukaj uporablas tako pointerje, kot dinamicno zasedanje pomnilnika, tako da predlagam da se tega lotis "zares" in pobrskas po googlu za informacijami o dinamicnih tabelah.

Ne pozabi tudi, da ko spomin zasedes z operatorjem new, moras spomin tudi sam sprostiti z operatorjem delete. torej:

delete (bla);

Lp
http://upor.blogec.si
http://bozjak.deviantart.com

Gundolf ::

Kot je bozjak povedal, rad bi le poudaril tole. Ko rečeš:
char temp[k];
mora biti k konstanta. V tvojem primeru je to spremenljivka, katere vrednost nastaviš v prejšnjem koraku. Zato ne deluje. Čeprav nekateri prevajalniki podpirajo tudi tak napol dinamičen način alociranje tabele in zna biti, da je to celo podprto s standardom C99. V to nisem ravno prepričan, zato vsekakor naredi tako, kot ti je bozjak svetoval.

MasterMind ::

Rad bi popravil bozjaka. Če delaš v C only. new operator odpade. V C-ju uporabljaj memlock ali callock, ki so v stdlib.h.

http://www.cplusplus.com/reference/clib...
Gentoo, KDE uporabnik.

Mavrik ::

Ahem. Dvoje:

a) 'new' v Cju ne obstaja, new C++ keyword.

b) v Cju se uporabla malloc (memory allocation, ne memlock?!).
The truth is rarely pure and never simple.

Gundolf ::

No dobro, zadosti bo o mallocu in Cju. Vprašanje je bilo v C++, new je v tem kontekstu pravilen odgovor.

Volk| ::

Nisem vedel da velikost polja ne mores definirat lokalno.
Ni cudno da mi ni bilo jasno zakaj mi ne dela.

Ok, za prihodnje vem. Hvala vam!
Aja, zdaj dela:D

Keki ::

@DirextX
Jaz bi to tvojo nalogo reso nekak tak

int main(int argc, char* argv[])
{
    int odg;
    do {
        cout<<endl;
        cout<<"1. Racunanje"<<endl;
        cout<<"2. Stojan"<<endl;
        cout<<"0. Izhod"<<endl;
        cout<<"Vnesi izbiro: ";
        cin>>odg;
        
        switch(odg)
        {
        case 1: 
             
                system ("CLS");
		cin.clear ();
		int n;
		cout << "Program vam izracuna veckotnik" << endl;
		cout << "Vpisite stevilo: ";
		cin >> n;
		cout << "Veckotnik ima " << n * (n - 3) / 2 << " stranic" << endl;
		cout<<endl;
		break;
				
         case 2: 
        	cout << "Vpisite kodo" << endl;
		/*tuki se neki manka*/
		break;
			
			
         case 0: 
              cout<<endl;
              cout<<"Program se bo zakljucil\n";
              break;
              
         default: 
                  cout<<endl;
                  cout<<"Ponovite izbiro"<<endl;
                  break;
                  
         }
         } while(odg!=0);
         
         //Raje kot system("PAUSE"); uporabi nekaj takega
         cin.ignore();
         cin.get();
         
         return 0;
         
}


Aja pa uporaba system komand ni najbol priporočljiva, tako zaradi stranskih učinkov kot zaradi same prenosljivosti kode.


@Volk|
Če ti polje(enodimenzionalno) inicializiraš, ne rabiš navest njegove velikosti in po nepotrebnem zasedat odvečn pomnilnik.
char Obrni(char niz[])
{
	int k=strlen(niz);

	for(int i=k; i >= 0;i--)
	{
	cout<<niz[i];
	}
}

int main()
{
	char niz[]= "Dobro jutro, C++!";
	cout <<  niz <<endl;
	Obrni(niz);
	cout<<endl;

	return 0;
} 
http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

Volk| ::

Funkcija ne sme izpisovat! So me naucli da se tega treba izogibat koliko je mogoce..torej tvoj nacin ni dober ceprav je najbolj simpl

aja, sem videl pri tebi da imas "int argc, char* argv[]" v mainu.
Zakaj je to?
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

Tutankhamun ::

void obrni (char *niz)
{
	int j = strlen (niz) - 1;
	int i = 0;
	while (j > i)
	{
		char ch = niz [i];
		niz [i] = niz [j];
		niz [j] = ch;
		--j;
		++i;
	}
}


int main(int argc, char* argv[])
{
	char niz [] = "Dobro jutro, C++!";
	cout << niz << endl;
	obrni (niz);
	cout << niz << endl;

	return 0;
}
AMD Phenom QUAD 9950 Black Edition, 8GB

Keki ::

Ja sj so vas prav učili, res se je treba tega izogibat. Tisto v mainu bi lahko načeloma tut spustil v tem primeru. Je pa nekaj v zvezi s sprejemanjem argumentov, podobno kot v javi.
http://www.alfakan.si/
http://mihajerot.si/

Volk| ::

@Tutankhamun
Ej, to pa je eleganta resitev. Niti na misel mi ni prisla. Je pa res ful enostavna.
Kot pravijo...najboljse ideje so preproste...zakaj bi komlicirali(kot sem v moji kodi jaz).
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.


Vredno ogleda ...

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

kje zaceti z c++ ?

Oddelek: Programiranje
323764 (2072) Monster
»

c++ in linux/windows

Oddelek: Programiranje
121630 (1506) rapvirus
»

Pomnilnik in c++

Oddelek: Programiranje
241912 (1621) Gundolf
»

obratno izpiši besedi - c++

Oddelek: Programiranje
131621 (1452) losnah
»

Kako bi naredil en ultra simple programček?

Oddelek: Programiranje
492226 (1507) AtaStrumf

Več podobnih tem