Multidesk.be » Forums » C en C++ » compiler nabootsen (gesloten)

Helpinformatie
Dit onderwerp bevindt zich in het archief.
Het is bijgevolg niet mogelijk er nog op te reageren.
  • Pagina
  • 1 van 1
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door kenwix2 op dinsdag 11 juli 2006 om 01:49:13.
kenwix2 heeft nog geen avatar toegevoegd
Multiviteit: 123
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Hallo


Ik ben een student informatica eerstejaar en ik zit met een groot probleem voor C. Ik heb de opdracht gekregen om een compiler na te bootsen.

De bedoeling van het programma is om voor elk open haakje (een "(" of "]") een gesloten te vinden. Ik had gedacht aan een teller die bij een open +1 telt en als hij een dicht haakje vindt, -1. Dus als je op het einde dan 0 hebt, is het goed.

Maar het grote probleem is dat ik veel lessen gemist heb door ziekte en ik niet veel weet over het werken met bestanden.

Ik heb al iets geschreven dat een bestand opent met "fopen", maar ik weet niet hoe ik moet controleren. maw de tekst aflopen op zoek naar haakjes.

Ik vraag hier zeker geen oplossing hoor, ik wil het zelf kunnen. Maar ik zou een duwtje in de goede richting wel apprecieren.



Alvast bedankt


BulBulRed
^ Reactie #1 geschreven door thekid op dinsdag 11 juli 2006 om 10:23:24.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Wel op letten dat je via dit systeem niet foutloos alles zult kunnen vinden

bvb ( )) ( zou volgens uw algoritme op het einde een 0 geven, maar het zou toch niet kloppen. Ze zou dus best ook controleren als je een sluit haakje hebt, dat je niet onder nul kunt gaan met je teller, en anders evt een fout werpen, die dan de lijn weergeeft en waar de fout gebeurt is.

Voor het controleren kan je een for loop gebruiker, en karakter per karakter overlopen.

In pseudo code dan

CODE
  1.  
  2. numeriek countQuote = 0;
  3. numeriek lijnnr = 0;
  4. bestand leesBestand = "C:\test.txt";
  5. text lijn = "";
  6.  
  7. open leesBestand
  8.  
  9. zolang (geen einde leesBestand)
  10.    lees lijn van leesBestand
  11.    
  12.    voor x = 0 to lengte(lijn)
  13.         if lijn[x] gelijk aan '('
  14.            countQuote = countQuote + 1
  15.         einde if
  16.         if lijn[x] gelijk aan ')'
  17.            if countQuote groter dan 0
  18.                countQuote = countQuote - 1
  19.            anders
  20.                druk naar scherm "Fout gebeurd op lijn " + lijnNr + " op positie " + x
  21.                ga naar einde programma
  22.            einde if
  23.         einde if 
  24.    herhaal
  25.  
  26.    lijnNr = lijnNr + 1   
  27.  
  28. doe
  29. sluit leesBestand
  30.  
  31. if countQuote == 0
  32.    druk naar scherm "Succesvol overlopen"
  33. einde if
  34.  


Azo zou ik toch beginnen, maar in C in mijn kennis van bestanden openen ook niet goed
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door kenwix2 op dinsdag 11 juli 2006 om 12:01:07.
kenwix2 heeft nog geen avatar toegevoegd
Multiviteit: 123
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
thx! dat helpt me zeker vooruit
^ Reactie #3 geschreven door kenwix2 op dinsdag 11 juli 2006 om 23:23:24.
kenwix2 heeft nog geen avatar toegevoegd
Multiviteit: 123
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ik heb lang gezocht naar de mogelijke oplossingen enz, en ik ben tot dit gekomen:

CODE
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /* HAAK.C (oef examen juni) - Kenny Willems (1 TI B) */
  6.  
  7. int main()
  8. {
  9.       /* initialisatie van de tellers */
  10.       int rechtehaak = 0;
  11.       int rondehaak = 0;
  12.       int accolade = 0;
  13.       char letter = 0;
  14.       FILE *iofile = NULL; //Pointer declaren die naar een file zal verwijzen
  15.  
  16.       if ( iofile = fopen("C:\test.c", "r") ) //Koppelen van file aan de pointer(iofile). R betekent READ !
  17.       {
  18.          while ( ( letter = fgetc( iofile ) ) != EOF ) //Zolang de file niet beeindigd is, voortdoen!
  19.          {
  20.              if ( letter == '[' || letter == ']' ) //controle van rechte haakjes
  21.              {
  22.                   if ( letter == '[' )
  23.                      rechtehaak++;
  24.                   else
  25.                      rechtehaak--;
  26.              }
  27.              if ( letter == '(' || letter == ')' ) //controle van ronde haakjes
  28.              {
  29.                   if ( letter == '(' )
  30.                      rondehaak++;
  31.                   else
  32.                      rondehaak--;
  33.              }
  34.              if ( letter == '{' || letter == '}' ) //controle van accolades
  35.              {
  36.                   if ( letter == '{' )
  37.                      accolade++;
  38.                   else
  39.                      accolade--;
  40.              }
  41.          }
  42.          
  43.          fclose(iofile); //sluiten van het bestand na het controleren
  44.          
  45.          if ( rechtehaak != 0 || rondehaak != 0 || accolade != 0 )
  46.          {
  47.             if ( rechtehaak != 0 )
  48.             {
  49.                if ( rechtehaak > 1 )
  50.                   printf("U hebt %d rechte haken vergeten\n",rechtehaak);
  51.                else
  52.                   printf("U hebt 1 recht haakje vergeten\n");
  53.             }
  54.             if ( rondehaak != 0 )
  55.             {
  56.                if ( rondehaak > 1 )
  57.                   printf("U hebt %d ronde haken vergeten\n",rondehaak);
  58.                else
  59.                   printf("U hebt 1 rond haakje vergeten\n");
  60.             }
  61.             if ( accolade != 0 )
  62.             {
  63.                if ( accolade > 1 )
  64.                   printf("U hebt %d accolades vergeten\n",rechtehaak);
  65.                else
  66.                   printf("U hebt 1 accolade vergeten\n");
  67.             }
  68.          }
  69.          else
  70.              printf("Geen fouten gevonden. Proficiat!\n");
  71.       }
  72.       else
  73.       {
  74.           printf("Er is een fout opgetreden bij het koppelen van de pointer aan de file!\n");
  75.       }
  76.       printf("\n\n--Einde--\n");
  77.  
  78.       system("PAUSE");
  79.       return 0;
  80. }
  81.  


En tekst.c is gewoon een C bestand met wat haakjes in...
^ Reactie #4 geschreven door NightCreature op woensdag 12 juli 2006 om 14:14:31.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
je kan ook een char array gebruiken en met scanf een bestands naam inlezen die de gebruiker opgeeft en dan die file openen.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #5 geschreven door kenwix2 op woensdag 12 juli 2006 om 22:03:23.
kenwix2 heeft nog geen avatar toegevoegd
Multiviteit: 123
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
dat is ook mogelijk, maar ik ben al blij dat ik tot dit resultaat ben gekomen. Hoe zou je dat dan juist doen met een char array en scanf? alle die scanf begrijp ik wel
^ Reactie #6 geschreven door NightCreature op maandag 17 juli 2006 om 01:08:08.
NightCreature's avatar
Multiviteit: 1196
MSc.
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
je plaatst bv in char* FileName de file name en dan open je gewoon met fopen(FileName,r) je file
Weet wel dat die file dan in de directory(map) moet staan waar je C prog staat
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
  • Pagina
  • 1 van 1
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten