Priemgetallen printen naar file Programmeren C

Status
Niet open voor verdere reacties.

iwi1982

Nieuwe gebruiker
Lid geworden
10 okt 2008
Berichten
2
Besten,

Ik ben een poging aan het doen om een programma in C te schrijven, printen naar het scherm gaat goed echter bij het schrijven naar een file, worden niet de waardes van het scherm naar het file geschereven.
Kan iemand mij verder helpen?
PHP:
//Schrijf een programma dat, na invoer van een getal x, alle priemgetallen berekent kleiner dan of gelijk aan x. 
//Gebruik hiervoor de zeefmethode van Erastosthenes  Schrijf het resultaat in een tekstfile.

 #include <stdio.h>
 #include <process.h>
 #include <stdlib.h>

FILE *fpuit;

 
 int main(int argc, char **argv)
 {
 int A, doorgaan;
 while (doorgaan > 0)                                        //repeat loop
 {
    fpuit = fopen("priem2.doc","w");                     //open het bestand
    printf("File geopened voor OUTPUT\n");
     printf("geef het maximale priemgetal in:");             //Vraag om het maximale priemgetal en lees dit vervolgens in
     scanf("%d", &A);
     
                 unsigned long long i,j,max = (argc == 2 ? atoll(argv[1]) : A);
                 char priem[max];
                 
                 for(i = 1; i <= max; i++) 
                       {priem[i] = 1;                             //Alle getallen op 1 instellen
                 priem[0]= priem[1]= 0;}                    //Nu gaan we de getallen 0 en 1 uitsluiten voor de priem getallen 
                                                           
                                                           /* opmerking:
                                                             alle veelvouden k*i van i met k kleiner dan i werden al weggestreept 
                                                             als veelvoud van k (of beter: van k's kleinste priemdeler),
                                                             dus mag de ondergrens van j inderdaad i*i ipv 2*i zijn.
                                                           */
                 for(i = 2; i * i < max; i++)
                   if(priem[i] == 1)                         // Als een getal een priem is
                      
                     for(j = i * i; j <= max; j += i)         //Nu gaan we de vermedigvuldigingen van de getallen weg strepen(de veelvoud van de getallen) tot aan het aangegegen priem getal    
                       priem[j] = 0;                           //Als het priem getal gelijk is aan J word deze 0 en word deze dus weg gestreept
                      
                     for(i = 1; i <= max; i++)               //Vervolgens kijken we tot en met welk priem getal we zouden moeten weergeven
                      if(priem[i] == 1)                      //als het priem[i] gelijk is aan 1 moet deze na het geven van printf worden weer geven
                        
                 //printf("%llu ",i);                     //nu geven we de opdracht om de priemgetallen op het scherm weer te geven
                 //printf("\n\n");                        //Sla even een regel of wat over
                 
   
                        printf("%d ",i);
                        fprintf(fpuit, "De priemgetallen zijn:\n");
                        fprintf(fpuit, "%d ", i);                          //schrijf naar het bestand                      
                        fclose(fpuit);                                       //sluit het bestand weer
                        printf("\nFile gesloten!");

                                                                             //printf("het maximale ingegeven getal was: %d\n", A);//Hiermee herinneren we de gebruiker wat ook al weer het ingeven getal was
 
 
{                                                     //nu volgt er een vraag om veder te gaan of te stoppen
 printf ("\nWilt u nog doorgaan? Ja = 1 en Nee = 0: ", doorgaan);
 scanf ("%d", &doorgaan);
        

  if (doorgaan == 0)                                   //indien men niet veder wilt gaan komt er de volgende melding, 
     {printf ("\nHet programma stopt!!!\n\n");
     system("PAUSE");	
     return 0;                                           //na het bedienen van een toets zal het programma beeindigd worden
     }
  else{ 
  printf("***************************************\n");//Sla even een regel over om vervolgens opnieuw te beginnen
  }
}
 }
}
 
Laatst bewerkt:
je kunt als je je programma uitvoert in opdrachtsprompt zeggen dat alle output naar een file moet dus bv

foo.exe > fooOutput.txt
 
je kunt als je je programma uitvoert in opdrachtsprompt zeggen dat alle output naar een file moet dus bv

foo.exe > fooOutput.txt

Oke Thanks het is me nu dan ook gelukt echter op een iets wat andere manier. Maar het werkt wel:thumb: was even ergens twee haakjes vergeten.
PHP:
 #include <stdio.h>
 #include <process.h>
 #include <stdlib.h>

FILE *f1;


 main(int argc, char **argv)
 {//begin main
 char s[100];
 time_t now;
 now=time(NULL);
 int A, doorgaan, startvraag;
 
 printf("\t***********************************************************\n");
 printf("\tMet dit programma is het mogelijk om de priem getallen te\n"); 
 printf("\tberekenen, de uitkomst zal naar het file priem.txt worden   \n");
 printf("\tgescherven. De gebruiker heeft de keuze om de uitkomst op\n");
 printf("\thet bestaande file toe tevoegen of te overschrijven!     \n");
 printf("\t***********************************************************\n\n");

 while (doorgaan > 0)                                                 //repeat loop
 { //begin de loop doorgaan
         

       /*de check of dat het file open staat werkt niet als deze door notepad is geopend!, Check werkt wel als het file
       b.v. door microsoft word is geopend!*/
 if ((f1 = fopen("priem.txt","a")) == NULL){//open if file geopend
                                   printf("file is reeds geopend"); 
                                   printf("sluit het file en beantwoord de volgende vraag");
                                   }//eind if file geopende
                                   
 else{// begin als file niet is geopend
       printf("Wilt u de gegevens in het file overschrijven of toevoegen?\n Overschrijven = 12 en Toevoegen = 0: ", startvraag);
       scanf ("%d", &startvraag);     
       strftime(s, 100,"%H:%M:%S op %A, %d, %B %Y",localtime(&now));  //bepaal de datum en tijd
       printf("%s\n\n", s);                                           //laat de datum en tijd op het scherm zien
       
       if (startvraag == 12){//begin if startvraag
          f1 = fopen("priem.txt","w");                                 //open het bestand
          printf("File geopened voor OUTPUT\n");
          fprintf(f1, "%s\n\n", s);                                   //Schrijf de datum&tijd boven aan het file
          }//eind if startvraag           
       
       else{//begin else startvraag
          f1 = fopen("priem.txt","a");                               //open het bestand
          printf("File geopened voor OUTPUT\n"); 
          fprintf(f1, "\n****************************************\n");
          fprintf(f1, "\n\n%s\n\n", s);                              //Schrijf de datum&tijd onder de oude gegevens in het file
          }//eind else startvraag       
    
       printf("geef het maximale priemgetal in, max is 5000:");             //Vraag om het maximale priemgetal en lees dit vervolgens in
       scanf("%d", &A);
       if (A<5001){// begin if waarde is onder 5001
          fprintf(f1,"Het maximaal ingegeven priem getal was:");
          fprintf(f1,"%d\n\n", A);
          fprintf(f1, "\nDe priemgetallen zijn:\n");
     
          {  // begin met het bepalen van de priem getallen   
          unsigned long long i,j,max = (argc == 2 ? atoll(argv[1]) : A);
          char priem[max];
          
               for(i = 1; i <= max; i++)
                      {priem[i] = 1;                              //Alle getallen op 1 instellen
                      priem[0]= priem[1]= 0;}                    //Nu gaan we de getallen 0 en 1 uitsluiten voor de priem getallen 
                                                           
                                                           /* opmerking:
                                                             alle veelvouden k*i van i met k kleiner dan i werden al weggestreept 
                                                             als veelvoud van k (of beter: van k's kleinste priemdeler),
                                                             dus mag de ondergrens van j inderdaad i*i ipv 2*i zijn.
                                                           */
                      for(i = 2; i * i < max; i++)
                            if(priem[i] == 1)                         // Als een getal een priem is
                      
                               for(j = i * i; j <= max; j += i)       //Nu gaan we de vermedigvuldigingen van de getallen weg strepen(de veelvoud van de getallen) tot aan het aangegegen priem getal    
                               priem[j] = 0;                        //Als het priem getal gelijk is aan J word deze 0 en word deze dus weg gestreept
                      
                                        for(i = 1; i <= max; i++)              //Vervolgens kijken we tot en met welk priem getal we zouden moeten weergeven
                                              if(priem[i] == 1) {                   //als het priem[i] gelijk is aan 1 moet deze na het geven van printf worden weer geven
                                    
                                              printf("%d ",i);                    //print de waarde naar het scherm
                                              fprintf(f1, "\a%d", i);}        //print de waarde naar het file
          } // einden van het bepalen van de priem getallen
                        
          fclose(f1);                      //sluit het bestand weer
          printf("\nFile gesloten!");                          
          }// eind if waarde is onder 5001
          
     else {//begin else waarde te groot
          printf("de waarde was te groot!");
          fprintf(f1, "de ingevoerde waarde was te groot");  
          fclose(f1);                      //sluit het bestand weer
          printf("\nFile gesloten!");   
          }//einde else waarde te groot      
   }// eind als file niet is geopend             

     printf ("\nWilt u nog doorgaan? Ja = 1 en Nee = 0: ", doorgaan);
     scanf ("%d", &doorgaan);
        
     if (doorgaan == 0){//begin if als er niet word doorgegaan                                   
        printf ("\nHet programma stopt!!!\n\n");
        printf("\t***********************************************************\n");
        printf("\tDe gebruiker heeft het programma gestopt!!\n"); 
        printf("\tDe berekende priem getallen zijn terug te vinden \n");
        printf("\tin het file priem.txt.\n");
        printf("\t***********************************************************\n\n");
        system("PAUSE");	
        return 0;                                           //na het bedienen van een toets zal het programma beeindigd worden
        }//eind if als er niet word doorgegaan
     else{//begin else regel overslaan 
        printf("***************************************\n");//Sla even een regel over om vervolgens opnieuw te beginnen
        }//eind else regel overslaan

}//eind van de loop doorgaan
}//eind main
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan