Zum Inhalt springen

FrauenundInfo

Mitglieder
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

  1. Hallo hier ist der kteiler quelltext der in der funktion prim () implementiert werden soll aber irgendwie versteh ich jetzt nicht ganz den zusammenhang bzw wie ich die beiden quelltexte zusammenfügen soll sodass es ein funktionierendes Programm wird...und ideen wie man die laufzeit verkürzen kann hab ich auch nciht... #include <stdio.h> #include <math.h> /* Vorwärtsdeklarationen */ long long kTeiler(long long n); long long leseLongLong(char *string); /* -------------------------------------------------------------------*/ int main() { long long n, res; printf("Eine Eingabe kleiner gleich 0 beendet das Programm !\n"); do { printf("\n-------------------------------------- \n"); n = leseLongLong("Geben Sie eine natürliche Zahl ein"); printf("Eingegeben wurde: %lld \n", n); if(n > 0) { res = kTeiler(n); printf("Der kleinste Teiler (größer 1) von %lld ist %lld.\n", n, res); } else { printf("Eingegebene Zahl kleiner 0: PROGRAMM-ENDE \n\n"); } } while(n > 0); return 0; } /* -------------------------------------------------------------------*/ /* Return: Gibt den kleinsten Teiler > 1 von n zurück * Annahme: n >= 1 (wird nicht geprüft) * * Folgerung: n == kTeiler(n) <=> n Primzahl oder n = 1 */ long long kTeiler(long long n) { long long max, kteiler; if(n < 4) return n; if(n % 2 == 0) return 2; if(n % 3 == 0) return 3; kteiler = 5; max = sqrt(n); while(n % kteiler != 0) { kteiler += 2; if(n % kteiler == 0){ break; } kteiler += 4; if(kteiler > max) kteiler = n; } return kteiler; } /// ======================================================================== // Liest alle im Eingabepuffer vorhandenen Zeichen bis zum // nächsten newline oder Datei-Ende (end of file, EOF) und // gibt lediglich das letzte Zeichen zurück. Dadurch wird der int flushStdin(void) { int c; do { c = getchar(); //printf(":%d:\n",c); // Debug-Ausgabe } while(c != '\n' && c != EOF); return c; } // ===================================================== /* Gibt eingelesen Wert zurück Vor der Eingabe wird der Wert von 'string' ausgegeben Im Fehlerfall wird -1 zurückgegeben * long long leseLongLong(char *string) { long long ein = -1; printf("Eingabe >> %s: ", string); while(scanf("%lld",&ein) != 1){ if(flushStdin() != EOF){ printf("Erneute Eingabe >> %s: ", string); } else { fprintf(stderr, " Falscher Eingabewert!\n"); break; } } return ein; }
  2. Hallo kann mir vllt jemand diesen Quelltext erklären? Das wäre supernett... also so das ich es verstehe als sagen wir mal leihe oder jmd mit grundkenntnissen in C (Ich weiß schon was Felder, Funktionen etc sind, deklaration, variablen etc aber kann diesen Quelltext nicht kommentieren und ihn auch nicht erklären)! /* Primfaktorzerlegung einer positiven natuerlichen Zahl n */ #include <stdlib.h> #include <stdio.h> void div_potenz(unsigned int *, unsigned int); int main( ) { unsigned int n,i,l; unsigned int r[3]={2,3,5}, q[8]={7,11,13,17,19,23,29,31}; printf("\nBerechnung der Primfaktorzerlegung \ von n\n\n"); printf("n = "); scanf("%u",&n); if (n!=1) { printf("Die Primfaktoren von %u sind:\n\n",n); for (i=0; i<3; i=i+1) { div_potenz(&n,r); } l=0; do { for (i=0; i<8;i=i+1) { div_potenz(&n,30*l+q); } l=l+1; } while ((30*l+7)*(30*l+7)<=n); if (n>1) { printf("%u Exp.: 1\n",n); } } exit(EXIT_SUCCESS); } /* Pruefen, ob p|x, Bestimmen und Herausdividieren der * groessten p-Potenz */ void div_potenz(unsigned int *x, unsigned int p) { unsigned int e=0; while (*x%p==0) { e=e+1; *x=*x/p; } if (e>0) { printf("%u Exp.: %u\n",p,e); } } Danke :uli
  3. Hallo ich habe folgendes Problem und zwar soll ich eine praktische Aufgabe in Informatik abgeben und das ist vorraussetzung um zur Prüfung zugelassen zu werden aber ich habe im moment gar keine Ahnung was ich machen soll (( Als vorlage haben wir folgenden Quelltex, die primfaktorzerlegung soll in der funktion prim () erfolgen in der es wiederum die funktion kteiler für den kleinsten gemeinsamen teiler gibt und die ausgabe soll dann z.b. so aussehen 12= 2 * 2 * 3, hab noch die Aufgabenstellung in den Anhang gepackt, ich habe auch einen anderen Quelltext gefunden der genau das machen soll was mein Programm können soll, aber den versteh ich irgendwie nicht so wirklich! Ach ja effizient soll es auch noch sein, also die Berechnung soll nich so lang dauern! #include <stdio.h> /* Vorwärtsdeklarationen */ long long leseLongLong(char * string); long long kTeiler(long long n); void prim(long long n); int main() { char * vorname = "Marcella"; /* Unbedingt anpassen */ char * nachname = "Seifert"; /* Unbedingt anpassen */ long long n = 1; printf("Erste praktische Aufgabe von %s %s.\n", vorname, nachname); // Zahlen in einer Schleife einlesen, // Abbruch, wenn eingelesene Zahl kleiner gleich 0. // Für jede eingelesene Zahl soll prim() aufgerufen werden! while(n) { n = leseLongLong("n"); } return 0; } // Berechnet die Primfaktorzerlegung von n und // gibt sie mit printf() aus! void prim(long long n) { // TO DO // Benutzen Sie die Funktion kTeiler() aus Übung 4! } Tausend mal Danke für eventuelle Hilfe // ======================================================================== // Liest alle im Eingabepuffer vorhandenen Zeichen bis zum // nächsten newline oder Datei-Ende (end of file, EOF) und // gibt lediglich das letzte Zeichen zurück. Dadurch wird der // Eingabepuffer geleert. // Die oft gesehene Lösung // fflush(stdin) // ist nach ANSI-Standard unbestimmt. int flushStdin(void) { int c; do { c = getchar(); //printf(":%d:\n",c); // Debug-Ausgabe } while(c != '\n' && c != EOF); return c; } // ===================================================== /* Gibt eingelesen Wert zurück Vor der Eingabe wird der Wert von 'string' ausgegeben Im Fehlerfall wird -1 zurückgegeben */ int leseLongLong(char *string) { long long ein = -1; printf("Eingabe >> %s: ", string); while(scanf("%lld",&ein) != 1){ if(flushStdin() != EOF){ printf("Erneute Eingabe >> %s: ", string); } else { fprintf(stderr, " Falscher Eingabewert!\n"); break; } } return ein; } praktAufgabe1.pdf

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...