Seite 2 von 2 « Erste 12
Ergebnis 21 bis 27 von 27

c++ Aufgaben

  1. #21 Zitieren
    Provinzheld Avatar von Drek
    Registriert seit
    May 2007
    Beiträge
    226
    Wenn ich i(nun zahl) als Integer deklariere kommt leider dieser Fehler
    error C2668: 'sqrt': Mehrdeutiger Aufruf einer überladenen Funktion
    Die Variablen hab ich nun größtenteils, hoffentlich für jeden verständlich, geändert
    Code:
    || y==1
    Da y von i abhängig ist und sich nicht ändert, solltest du so eine Abfrage außerhalb der For-Schleife durchführen.
    Ich weis leider nicht was das bezwecken soll... y nimmt jedes mal die Größe von i nur ohne die Kommastellen da % nicht mit double funktioniert.

    Das mit dem Dynamischen array werd ich mir als nächstes vornehmen aber das scheint ein größeres Thema zu sein. Bin mir auch nicht sicher ob es sich bei etwas weniger als 4800 Primzahlen als Kontrollzahlen eignet. Aber sicher, wenn ich versuche alle Primzahlen zu speichern.

    Dein Code war bis auf die Stelle if(t<=4800) gut Danke, da bei 0 angefangen wird zu zählen und die letzte Zahl vom array die Stelle 4799 einnimmt muss es if(t<4800) heißen .

    Hier mein Code bis jetzt
    Code:
    #include "stdafx.h"
    #include "iostream"
    #include "math.h"
    #include "time.h" 
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int eing, c, prim, intzahl, frag, t, t2, wurzel;
    	double time1=0.0, tstart, zahl;
    	int arr[4800];
    	bool isPrim;
    
    
    	cout<<"Wenn sie die Anzahl der Primzahlen von 0 bis x haben wollen geben sie 1 ein.\nWenn sie wissen wollen ob x eine Primzahl ist geben sie 2 ein. ";
    	do
    	{
    		cin>>frag;
    		cout<<"\n";
    		if(frag<1 || frag>2)
    		{
    			cout<<"Falsche Zahl eingegeben nur 1 und 2 sind erlaubt. Bitte Eingabe wiederholen: ";
    		}
    	}while(frag<1 || frag>2);
    	if(frag==1)
    	{
    	cout<<"Bitte eine Zahl eingeben: ";
    	do
    	{
    		cin>>eing;
    		cout<<"\n";
    		if(eing<0)
    		{
    			cout<<"Negative Zahlen sind nicht möglich. Bitte Eingabe wiederholen: ";
    		}
    	}while(eing<0);
    	if(eing<2)
    	{
    		prim=0;
    	}
    	else
    	{
    		prim=1;
    	}
    	t=0;
    	arr[0]=3;
    	tstart = clock();
    	for(zahl=3;zahl<=eing;zahl+=2)
    	{
    		isPrim=true;
    		for(wurzel=sqrt(zahl), intzahl=zahl, t2=0; arr[t2]<=wurzel; t2++)
    		{
    			if(intzahl%arr[t2]==0)
    			{
    				isPrim=false; //Es wurde ein Teiler gefunden
    				break;
    			}	
    		}
    		if (isPrim)//Äquivalent zu if (isPrim==true): Wenn also kein Teiler gefunden wurde
    		{
    			if(t<4800)
    			{
    				arr[t]=intzahl;//intzahl hat immer noch den Wert aus der For-Schleife
    				t++;
    			}
    		prim++;
    		}
    	}
    	time1 += clock() - tstart;
    	time1 = time1/CLOCKS_PER_SEC;
    
    	cout<<"Zeit = "<<time1<<" Sekunden";
    
    	cout<<"\nEs befinden sich insgesamt "<<prim<<" Primzahlen zwischen 0 und "<<eing<<"\n\n";
    
    	}
    	else if(frag==2)
    	{
    		cout<<"Bitte eine Zahl eingeben: ";
    		do
    		{
    			cin>>zahl;
    			if(zahl<0)
    			{
    				cout<<"Negative Zahlen sind nicht möglich. Bitte Eingabe wiederholen: ";
    			}
    		}while(zahl<0);
    		cout<<"\n";
    		for(wurzel=sqrt(zahl), c=3, intzahl=zahl; c<=wurzel+2; c+=2)
    		{
    			cout<<fixed;
    			if(intzahl%c==0 && c<=wurzel || intzahl==1)
    			{
    				cout<<intzahl<<" ist keine Primzahl!\n\n";
    				break;
    			}
    			else if(c>wurzel)
    			{
    				cout<<intzahl<<" ist eine Primzahl!\n\n";
    			}
    		}
    	}
    	return 0;
    }
    Mindestvoraussetzungen nicht erfüllt!
    Die von mir geschriebenen Texte enthalten zufällig generierte Rechtschreib- und Grammatikfehler.
    Error 1337 inGame Serverausfall ( Netzteil des Hauptdatenbankservers defekt )
    "Sir we are surrounded!!!" "Excellent, then we can attack in any direction."
    Das maximale Volumen subterrarer Agrarproduktivität steht im reziproken Verhältnis zur intellektuellen Kapazität Ihrer Erzeuger.
    Drek ist offline

  2. #22 Zitieren
    Provinzheld Avatar von Drek
    Registriert seit
    May 2007
    Beiträge
    226
    Nun habe ich mein Programm mit einem dynamischen Array versehen aber bei der Größe des Arrays kommt, wenn ich es so mache, dass die Größe der Wurzel aus der Eingabe entspricht immer eine Fehlermeldung Der Speicher xyz verweist auf XYZ und der Befehl "written" konnte nicht ausgeführt werden. Ich habe das Problem erstmal umgangen indem ich die Größe des Arrays auf eing/2 gesetzt habe. Ich könnte sicher auch den Array jedes mal vergrößern, bevor ein Wert hinein geschrieben wird aber das dürfte das Programm sicher Langsamer machen.

    Hier die entsprechenden Passagen
    Code:
    int *arr, eing, arrgr;
    double eingdo;
    
    cin>>eing;
    eingdo=eing;
    arrgr=sqrt(eingdo);
    arr=new int [arrgr];
    
    delete[] arr;
    Mindestvoraussetzungen nicht erfüllt!
    Die von mir geschriebenen Texte enthalten zufällig generierte Rechtschreib- und Grammatikfehler.
    Error 1337 inGame Serverausfall ( Netzteil des Hauptdatenbankservers defekt )
    "Sir we are surrounded!!!" "Excellent, then we can attack in any direction."
    Das maximale Volumen subterrarer Agrarproduktivität steht im reziproken Verhältnis zur intellektuellen Kapazität Ihrer Erzeuger.
    Drek ist offline Geändert von Drek (11.01.2009 um 22:15 Uhr)

  3. #23 Zitieren
    Halbgott
    Registriert seit
    Mar 2003
    Beiträge
    9.125
    Gibt hier keinen Fehler aus.
    Chris ist offline

  4. #24 Zitieren
    Provinzheld Avatar von Drek
    Registriert seit
    May 2007
    Beiträge
    226
    Zitat Zitat von Chris Beitrag anzeigen
    Gibt hier keinen Fehler aus.
    Ok der Fehler lag doch woanders und zwar in der Variable time1... scheinbar kann er sie nicht aufrufen, denn Zeit= bricht er ab.
    Mindestvoraussetzungen nicht erfüllt!
    Die von mir geschriebenen Texte enthalten zufällig generierte Rechtschreib- und Grammatikfehler.
    Error 1337 inGame Serverausfall ( Netzteil des Hauptdatenbankservers defekt )
    "Sir we are surrounded!!!" "Excellent, then we can attack in any direction."
    Das maximale Volumen subterrarer Agrarproduktivität steht im reziproken Verhältnis zur intellektuellen Kapazität Ihrer Erzeuger.
    Drek ist offline

  5. #25 Zitieren
    Provinzheld Avatar von Drek
    Registriert seit
    May 2007
    Beiträge
    226
    Nun hab ich den Fehler gefunden war natürlich nur ein ganz kleiner
    Code:
    #include "stdafx.h"
    #include "iostream"
    #include "math.h"
    #include "time.h" 
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    	int eing, c, prim, intzahl, frag, t, t2, wurzel, *arr=0, arrgr;
    	double time1=0, tstart, zahl, eingdo;
    	bool isPrim;
    
    
    	cout<<"Wenn sie die Anzahl der Primzahlen von 0 bis x haben wollen geben sie 1 ein.\nWenn sie wissen wollen ob x eine Primzahl ist geben sie 2 ein. ";
    	do
    	{
    		cin>>frag;
    		cout<<"\n";
    		if(frag<1 || frag>2)
    		{
    			cout<<"Falsche Zahl eingegeben nur 1 und 2 sind erlaubt. Bitte Eingabe wiederholen: ";
    		}
    	}while(frag<1 || frag>2);
    	if(frag==1)
    	{
    	cout<<"Bitte eine Zahl eingeben: ";
    	do
    	{
    		cin>>eing;
    		eingdo=eing;
    		arrgr=sqrt(eingdo);
    		arr=new int [arrgr];
    		cout<<"\n";
    		if(eing<0)
    		{
    			cout<<"Negative Zahlen sind nicht möglich. Bitte Eingabe wiederholen: ";
    		}
    	}while(eing<0);
    	if(eing<2)
    	{
    		prim=0;
    		cout<<"\nEs befinden sich insgesamt "<<prim<<" Primzahlen zwischen 0 und "<<eing<<"\n\n";
    		return 0;
    	}
    	else
    	{
    		prim=1;
    	}
    	t=0;
    	arr[0]=3;
    	tstart = clock();
    	for(zahl=3;zahl<=eing;zahl+=2)
    	{
    		isPrim=true;
    		for(wurzel=sqrt(zahl), intzahl=zahl, t2=0; arr[t2]<=wurzel; t2++)
    		{
    			if(intzahl%arr[t2]==0)
    			{
    				isPrim=false; //Es wurde ein Teiler gefunden
    				break;
    			}	
    		}
    		if (isPrim)//Äquivalent zu if (isPrim==true): Wenn also kein Teiler gefunden wurde
    		{
    			if(t<arrgr)
    			{
    				arr[t++]=intzahl;
    			}
    
    		prim++;
    		}
    	}
    	time1 += clock() - tstart;
    	time1 = time1/CLOCKS_PER_SEC;
    
    	cout<<"Zeit = "<<time1<<" Sekunden";
    
    	cout<<"\nEs befinden sich insgesamt "<<prim<<" Primzahlen zwischen 0 und "<<eing<<"\n\n";
    	}
    	else if(frag==2)
    	{
    		cout<<"Bitte eine Zahl eingeben: ";
    		do
    		{
    			cin>>zahl;
    			if(zahl<0)
    			{
    				cout<<"Negative Zahlen sind nicht möglich. Bitte Eingabe wiederholen: ";
    			}
    		}while(zahl<0);
    		cout<<"\n";
    		for(wurzel=sqrt(zahl), c=3, intzahl=zahl; c<=wurzel+2; c+=2)
    		{
    			cout<<fixed;
    			if(intzahl%c==0 && c<=wurzel || intzahl==1)
    			{
    				cout<<intzahl<<" ist keine Primzahl!\n\n";
    				break;
    			}
    			else if(c>wurzel)
    			{
    				cout<<intzahl<<" ist eine Primzahl!\n\n";
    			}
    		}
    	}
    	return 0;
    }
    Was könnte ich jetzt noch damit machen.
    Mindestvoraussetzungen nicht erfüllt!
    Die von mir geschriebenen Texte enthalten zufällig generierte Rechtschreib- und Grammatikfehler.
    Error 1337 inGame Serverausfall ( Netzteil des Hauptdatenbankservers defekt )
    "Sir we are surrounded!!!" "Excellent, then we can attack in any direction."
    Das maximale Volumen subterrarer Agrarproduktivität steht im reziproken Verhältnis zur intellektuellen Kapazität Ihrer Erzeuger.
    Drek ist offline

  6. #26 Zitieren
    Brechstange
    Gast
    In richtigem Standard-C++ schreiben, das was du da machst, wird jedenfalls nicht von allen Compilern übersetzt.

    Als erstes mal, die art wie du Dateien einbindest: Prinzipiel ist das schon richtig, nur wenn die einzubindende Datei in Hochkommata steht, wird laut C++-Standard im aktuellen Verzeichnis und nicht im Include-Verzeichnis des Compilers nach der Datei gesucht. Stattdessen sollte man da eckige klammern benutzen.

    Also statt »#include "iostream"« lieber »#include <iostream>«.

    Ausserdem heißen in C++ die Headerdateien die aus C übernommen wurden, also beispielsweise math.h und time.h, nicht mehr so, sondern die Endung fällt weg und an den Anfang des Namens kommt ein c, aus math.h wird also cmath. Das hat den Vorteil, dass die ganzen Funktionen aus cmath nun im Namensraum std sind.

    Zu guter letzt deine Hauptfunktion, diese heißt eigentlich nicht _tmain(), sondern ganz einfach main(). Zudem ist der zweite Parameter etwas unglücklich gewählt, _TCHAR ist wird jedenfalls nicht von allen Compilern verstanden, nimm lieber char.
    Im klartext würde deine Hauptfunktion dann so aussehen.
    Code:
    int main( int argc, char *argv[] )
    Standards sind nunmal da um eingehalten zu werden. Auch wenn Microsoft das anders sieht, sollte dich das nicht davon abhalten, dich selber daran zu halten.

    Ansonsten könntest du deinen Quelltext noch kommentieren. Wenn du in einem Jahr mal wieder zufällig über das Programm stoplerst und etwas damit machen willst, wirst du sonst unverhältnismässig lange brauchen um den Code wieder zu verstehen. ^^
    Geändert von Brechstange (15.01.2009 um 17:21 Uhr)

  7. #27 Zitieren
    Provinzheld Avatar von Drek
    Registriert seit
    May 2007
    Beiträge
    226
    Ok Danke für die Hinweise Brechstange und den Teil mit _tmain() und so hat mir Visual Studio 2005 also Microsoft gemacht.

    PS: Natürlich auch Danke an alle andren die mir bisher geholfen haben
    Mindestvoraussetzungen nicht erfüllt!
    Die von mir geschriebenen Texte enthalten zufällig generierte Rechtschreib- und Grammatikfehler.
    Error 1337 inGame Serverausfall ( Netzteil des Hauptdatenbankservers defekt )
    "Sir we are surrounded!!!" "Excellent, then we can attack in any direction."
    Das maximale Volumen subterrarer Agrarproduktivität steht im reziproken Verhältnis zur intellektuellen Kapazität Ihrer Erzeuger.
    Drek ist offline

Seite 2 von 2 « Erste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •