C++ problem :)
Prikazujem rezultate 1 do 10 od 10

Tema: C++ problem :)

  1. #1
    Početnik
    Učlanjen
    31.01.2006.
    Poruke
    6
    Reputaciona moć
    0

    Podrazumevano C++ problem :)

    imam jedan problem s jednim programom,nikako da ga riješim,radi se o programu koji treba da ispituje tačnost zagrada ... primjer:

    kad upišemo ovo {2+[2(3-1)]-2} da ispiše ispravno a
    kad upišemo ovo {2+[2(3-1)]-2 da ispiše neispravno jer fali jedna zagrada , a to bi morao uraditi preko funkcija ,,, hvala!!!!



  2. #2
    Primećen član
    Učlanjen
    24.11.2003.
    Poruke
    641
    Reputaciona moć
    58

    Podrazumevano Re: C++ problem :)

    malo konkretnije: da li se ovo cita iz konzole, iz fajla , ....?
    treba ovo da prebacis u string i da napravis funkciju koja ispituje char po char i registruje pojavljivanje zagrada.............

  3. #3
    Početnik
    Učlanjen
    31.01.2006.
    Poruke
    6
    Reputaciona moć
    0

    Podrazumevano Re: C++ problem :)

    trebali bi da upisemo neke brojeve na kojima se vrše bilo koje matematicke operacije ali da se oni nalaze u zagradama,i onda da na kraju ispise ako je redoslijed zagrada { , [ , ( , ) , ] , } da je ispravno , a ako se slucajno nalazi velika zagrada u maloj ili velika u srednjoj , il mozda fali neka zagrada da ispise na je ne ispravno ...

  4. #4
    Ističe se juznivetar (avatar)
    Učlanjen
    12.02.2005.
    Pol
    muški
    Lokacija
    -
    Poruke
    2.041
    Reputaciona moć
    67

    Podrazumevano Re: C++ problem :)

    Dakle provjeravas svaki znak (character) i ako naleti na otvorenu zagradu, da neki bool postane TRUE, i kada naidje na zatvorenu tu istu zagradu bool postaje FALSE, na kraju ako je taj bool TRUE, hvali zagrada.
    Ovo je dakle primjer sa jednom zagradom, a ti samo povecaj broj bool-ova kako bi mogao do najsitnijeg detalja da pronadjes gresku

  5. #5
    Primećen član RiSK (avatar)
    Učlanjen
    19.01.2004.
    Pol
    muški
    Poruke
    678
    Reputaciona moć
    57

    Podrazumevano Re: C++ problem :)

    Bas me je opustilo ovo... Nisam ga bas testirao ali valjda radi.
    snaci ces se vec...

    Happy hackin'

    Kod:
    /*
    
    ::Algoritam::
    
    Proveravacemo ispravnost izraza znak po znak.
    
    Usvojimo redosled zagrada tako da je najvece tezine
    viticasta {,} druga po redu srednja [,] i treca
    obicna zagrada (,).
    
    =========================================================
    
    Gresku u izrazu smo otkrili ako:
    
    --1-- pronadjemo zagradu vece tezine od tezine
    zadnje otvorene zagrade. Sta hocu da kazem:
    
    Ako imamo do sada ovaj redosled: { [ ] ( ) (
    Zadnja otvorena zagrada je (. Ako je sledeca otorena
    zagrada vece tezine, znaci [, {, ] ili } imamo gresku u izrazu.
    
    
    --2-- pronadjemo zatvorenu zagradu koja predhodno
    nije otvorena
    
    --3-- dodjemo do kraja izraza pri cemu neka od zagrada 
    nije zatvorena
    
    ==========================================================
    
    Koristimo tri promenljive tipa int, svaku za po jedan tip
    zagrada, na sledeci nacin. Na pocetku ispitivanja inicijalizujemo
    ih na 0. Zatim, ako nadjemo na otvorenu zagradu nekog tipa
    povecavamo odgovarajucu promenljivu za 1, a kada naidjemo na 
    zatvorenu zagradu tog tipa smanjujemo njenu vrednost za 1.
    
    Greska -3- se detektuje tako sto nakon pregledanog citavog niza
    neka od promanjljivih nije 0, t.j. veca je od nule.
    
    Greska -2- se detektuje tako sto odgovarajuca promenjljiva uzima vrednost
    manju od 0 (t.j. -1)
    
    Greska -1- se detektuje tako sto pri povecavanju vrednosti odgovarajucoj
    promenjljivoj, promenljive koje kontrolisu zagrade vece tezine nisu 0
    (vec su vece od 0).
    
    ==========================================================
    
    Valjda si razumeo :)
    
    
    */
    
    #include "iostream.h"
    using namespace std;
    
    
    int proveriIzraz(char* izr){
    //vraca 0 ako je izraz ispravan, u suprotnom vraca poziciju na kojoj je prva greska
    	int
     	zag1 = 0, //{}
    	zag2 = 0, //[]
    	zag3 = 0, //()
    	pozicija = 1;
    
    	char* current = izr;
    
    	while ( (*current) != 0 )	{
    
    		switch ( *current ) {
    
    		case '{' :
    		if ( (zag2 != 0) || (zag3 != 0) ) {
    				cout << "Greska na poziciji " <<pozicija <<": nedozvoljena zagrada {\n" ;
    		return pozicija;}
    		zag1++;
    		break;
    
    		case '}' :
    		if ( (zag2 != 0) || (zag3 != 0) ) {
    			cout << "Greska na poziciji " <<pozicija <<" : nedozvoljena zagrada }\n" ;
    			return pozicija;
    		}
    		zag1--;
    		if ( zag1<0 ) {
    			cout << "Greska na poziciji " <<pozicija <<" : ne postoji odgovarajuca otvorena zagrada za }.\n";
    			return pozicija;
    		};
    		break;
    
    	
    		case '[' :
    		if ( zag3 != 0) {
    			cout << "Greska na poziciji " <<pozicija <<": nedozvoljena zagrada [\n" ;
    			return pozicija;}
    		zag2++;
    		break;
    
    		case ']' :
    		if ( zag3 != 0) {
    			cout << "Greska na poziciji " <<pozicija <<" : nedozvoljena zagrada ]\n" ;
    			return pozicija;
    		}
    		zag2--;
    		if ( zag2<0 ) {
    			cout << "Greska na poziciji " <<pozicija <<" : ne postoji odgovarajuca otvorena zagrada za ].\n";
    			return pozicija;
    		}
    		break;
    
    		case '(' :		
    		zag3++;
    		break;
    
    		case ')' :		
    		zag3--;
    		if ( zag3<0 ) {
    			cout << "Greska na poziciji " <<pozicija <<" : ne postoji odgovarajuca otvorena zagrada za ).\n";
    			return pozicija;
    		}
    		break;
    
    		} //switch
    
    		pozicija++;
    		current++;
    
    	} //while
    
    	if ( (zag1+zag2+zag3) != 0 ) {
    		cout << "Nisu sve zagrade zatvorene!\n" ;
    		return pozicija+1;
    	}
    
    return 0;}
    
    
    int main(int paramCnt, char** paramStr){
    	
    	if ( paramCnt == 1 ) {
    		cout << "Koristi sa: " <<paramStr[0] <<" izraz1 [ izraz2 [ izraz3 [...] ] ] \n" ;
    		return 1;
    	}
    
    	int i;
    	for (i=1; i<paramCnt; i++) {
    		cout << "\nProveravam izraz '" <<paramStr[i] <<"' :\n" ;
    		if ( proveriIzraz(paramStr[i]) == 0 ) cout << "Izaraz je ispravan. \n";
    	}
    
    return 0;}
    Everything I wrote here is under the terms og GNU/GPL.
    FREE YOUR MIND

  6. #6
    Početnik
    Učlanjen
    31.01.2006.
    Poruke
    6
    Reputaciona moć
    0

    Podrazumevano Re: C++ problem :)

    skontao sam to ,ali kad ga kompajliram nece da ga pokrene,ali otvorim ga preko command prompt i pishe mi " Koristi sa : C:\c++\sem.exe izraz1 [ izraz2 [ izraz3 [...] ] ]" a ovoj C:\c++\sem.exeizraz1 folder na C disku je folder gdje kompajler pravi exe fajl od ovog programa ... u cemu je problem ?

  7. #7
    Ističe se juznivetar (avatar)
    Učlanjen
    12.02.2005.
    Pol
    muški
    Lokacija
    -
    Poruke
    2.041
    Reputaciona moć
    67

    Podrazumevano Re: C++ problem :)

    Evo ti kod, ali samo sa obicnim zagradama '(' i ')', znaci sablonski samo dodas zagrade koje nedostaju, [] i {}, ako hoces naravno.
    Dakle program ne provjerava samo da hvali zagrada, nego i dali su pozicije ispravne, tako da nece biti tacno ovo recimo ())(


    #include <iostream>
    using namespace std;
    int main()
    {
    char text[100];
    int oz[100], oz1[100], oz2[100];
    int n1 = 0, n2 = 0, n11 = 0, n22 = 0;
    bool tacan = true;
    // ISPIS ZADATKA
    cin.getline(text, 100);
    // DODJELJIVANJE VRIJEDNOSTI KOJE ODREDJUJU OTVORENOST-ZATVORENOST ZAGRADA
    for(int i = 0; i < 100; i++)
    {
    oz1[i] = 1000;
    oz2[i] = 1000;
    }
    // PROVJERA I PAMCENJE POJAVLJIVANJA ZAGRADE
    for(int i = 0; i < 100; i++)
    {
    if(text[i] == '(')
    oz[i] = 1;
    else if(text[i] == ')')
    oz[i] = 2;
    else
    oz[i] = 0;
    }
    // DODJELJIVANJE POZICIJE NA KOJIMA SE POJAVLJUJU ZAGRADE
    for(int i = 0; i < 100; i++)
    {
    if(oz[i] == 1)
    {
    n1++;
    oz1[n11] = i;
    n11++;
    }
    if(oz[i] == 2)
    {
    n2++;
    oz2[n22] = i;
    n22++;
    }
    }
    // PROVJERA ISPRAVNOSTI POLOZAJA ZAGRADA
    for(int i = 0; i < 100; i++)
    {
    if(oz1[i] > oz2[i])
    {
    cout << "\nNemoze biti prva ')' zagrada!";
    cout << "\nOna se nalazi na poziciji " << oz2[i] + 1 << ".";
    tacan = false;
    }
    }
    // FINALNA PROVJERA DALI JE ILI NIJE TACAN ZADATAK
    if(n1 != n2)
    tacan = false;
    if(tacan == false)
    cout << "\nZadatak je NETACAN!";
    if(tacan == true)
    cout << "\nZadatak je TACAN!";
    }

  8. #8
    Početnik
    Učlanjen
    31.01.2006.
    Poruke
    6
    Reputaciona moć
    0

    Podrazumevano Re: C++ problem :)

    tnx prijatelju

  9. #9
    Primećen član RiSK (avatar)
    Učlanjen
    19.01.2004.
    Pol
    muški
    Poruke
    678
    Reputaciona moć
    57

    Podrazumevano Re: C++ problem :)

    @bega: Pokreni ga sa

    c:\c++\sem.exe "(a+b)-[c/d+(e+f)*p]"

    znaci iz terminala sa: ime_programa izaraz_koji_proveravas

    Daj malo detalja - kada ne radi. Je l za bilo koje argumente sa komandne linije pise isto ono?
    Koji je kompajler? Mozda je moguce da drugacije prosledjuje crednosti u funkciju main(), mada bi ovo treblao da bude standard.....

    Kod mene radi odlicno.... Na ovome: gcc 4.0, GNU bash 3.0, linux 2.6.10.
    Everything I wrote here is under the terms og GNU/GPL.
    FREE YOUR MIND

  10. #10
    Početnik
    Učlanjen
    31.01.2006.
    Poruke
    6
    Reputaciona moć
    0

    Podrazumevano Re: C++ problem :)

    da,bilo sta da upisem uvjek mi isto ispise ono , a uspio sam preko command prompt-a ,a pokusat cu to rjesiti ... thnx

Slične teme

  1. Problem sa Flash playerom ili moguci Java problem.
    Autor Psyduck u forumu Internet
    Odgovora: 0
    Poslednja poruka: 24.01.2009., 11:52
  2. problem sa boot-ovima - GRUB4DOS problem
    Autor twix u forumu Unix / Linux Operativni sistemi
    Odgovora: 0
    Poslednja poruka: 09.12.2008., 20:53
  3. problem - komp mi radi usporeno - problem
    Autor VisionOfDisorder u forumu Hardver
    Odgovora: 11
    Poslednja poruka: 28.07.2005., 01:15
  4. Html problem je resen. Vb problem jos nije resen!
    Autor E537A6 u forumu Programiranje
    Odgovora: 0
    Poslednja poruka: 08.02.2005., 22:45
  5. Problem bio,problem resen.
    Autor Leka u forumu Softver
    Odgovora: 0
    Poslednja poruka: 11.03.2004., 23:10

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •