Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
25.01.11, 14:02
|
#1
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 23
Bedankt: 1
|
Zahlen zählen in c++
hi leute,
habe heute ein Programm geschrieben welches mir die Gesamtanzahl der Zahlen und der Anzahl größer 1000 angeben soll. Nur leider habe ich irgendwo einen Fehler. Ich benutze Microsoft Visual Studio. Hoffe es kann mir irgendjemand dabei helfen.
Hier der geschriebene Code:
#include <iostream>
using namespace std;
int CountNumbers (int Number) {
int AllNumbers=0;
bool Break=false;
while (Break == false) {
if (Number != -1)
AllNumbers++;
else
Break == true;
}
return AllNumbers;
}
int CountNumbersOver1000 (int Number) {
int NumbersOver1000 = 0;
bool Break = false;
while (Break == false) {
if (Number != -1) {
if (Number > 1000)
NumbersOver1000++;
}
else
Break == true;
}
return NumbersOver1000;
}
int main () {
int NumIn=0;
cout << "Geben Sie eine Zahl ein: ";
cin >> NumIn;
cout << "Anzahl Zahlen = "<< CountNumbers (NumIn) << endl;
cout << "Anzahl Zahlen Größer 1000 = "<< CountNumbersOver1000 (NumIn) << endl;
}
Vielen Dank schon Mal im Voraus!
|
|
|
25.01.11, 14:34
|
#2
|
Süßstoffbehältnis
Registriert seit: Feb 2009
Beiträge: 9
Bedankt: 6
|
Ich habe zwar noch nie in C++ programmiert, nur in Java und C, aber ich würde dir gerne helfen, was genau ist der Fehler(Fehlermeldung, Falsche ausgabe) ?
Auserdem verstehe ich nicht was dein Programm bewirken soll du ließt eine Zahl ein und willst überprüfen ob die über oder unter 1000 liegt?
Deine in deiner Beschreibung sagst du ja das er Zahlen(Mehrzahl) zählt.
MfG
Pokefreak
__________________
|
|
|
25.01.11, 15:19
|
#3
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 23
Bedankt: 1
|
mein Fehler liegt bei der Ausgabe. Es kommt nur: "Geben Sie eine Zahl ein:" und dann passiert nichts mehr.
Zum Programm: Man soll beliebig viele Zahlen eingeben können, bei der Eingabe von -1 erfolgt ein Abbruch. Es wird überprüft, wieviele Zahlen und wieviele Zahlen über 1000 eingegeben wurden.
|
|
|
25.01.11, 15:30
|
#4
|
Süßstoffbehältnis
Registriert seit: Feb 2009
Beiträge: 9
Bedankt: 6
|
Hier bitte so wie du es haben wolltest.
Code:
#include <iostream>
using namespace std;
int CountNumbers (int Number[], int lang) {
int kleinT=0;
for(int n=0;n<lang;n++)
{
if (Number[n] >0 && Number[n]<1000)
kleinT++;
}
return kleinT;
}
int main () {
int n=0;
int NumIn[20];
int laenge=0,kleinerT=0;
cout << "Geben Sie Zahlen ein, abbruch mit -1: ";
while(true)
{
cin >> NumIn[n];
if(NumIn[n]==-1)
break;
n++;
}
laenge=n;
cout << "Anzahl Zahlen = "<< laenge<< endl;
kleinerT=CountNumbers (NumIn,laenge);
laenge=laenge-kleinerT;
cout << "Anzahl Zahlen Groesser 1000 = "<< laenge << endl;
cout << "Anzahl Zahlen Kleiner 1000 = "<< kleinerT << endl;
}
Dein Programm ist leider vom grundsatz her total Falsch.
Wenn du alles erklärt haben willst, auch warum deins nicht funktionieren können wir uns gerne mal per Skype oder TS unterhalten^^
Juhu, mein erstes c++ Programm
Edit: es gibt auch einen weg ohne Arrays, denke das wäre einfacher für dich, bei bedarf kann ich diesen auch noch benutzen
__________________
|
|
|
25.01.11, 15:33
|
#5
|
Mitglied
Registriert seit: May 2010
Beiträge: 426
Bedankt: 224
|
ich kenn mich mit c++ auch nicht so toll aus... trotzdem versuch ichs mal...
wozu benutzt du die while-schleife? die bringt dich in diesem fall doch sicher in eine endlosschleife und dein programm rennt sich tot.
du übergibst der funktion ja ein integer. wenn dieser wert aber != -1 ist, fängt deine schleife an deine zählvariable hochzuzählen.. und zwar bis der wert der der funktion übergeben wird =-1 ist. das passiert aber nicht, weil du dir funktion ja nicht mit -1 aufgerufen hast.
deine funktion müsste in etwa so aussehen:
int i=0;
int i1k=0;
public void count(int nummer)
{
if(nummer >= 1000) i1k++;
i++;
}
als ausgebe in deinem text, gibst du nicht die funktion zurück, sondern kannst direkt die variablen i bzw i1k benutzen.
die schreife musst du dann um die eingabeaufforderung der nummer legen, damit das programm nicht nach der ersten eingegebenen zahl beendet wird.
der code oben benutzt übrings die java-syntax, da ich die c++ nicht mehr genau kenne
|
|
|
25.01.11, 15:39
|
#6
|
Mitglied
Registriert seit: May 2010
Beiträge: 426
Bedankt: 224
|
Zitat:
Zitat von pokefreak
Hier bitte so wie du es haben wolltest.
Dein Programm ist leider vom grundsatz her total Falsch.
Wenn du alles erklärt haben willst, auch warum deins nicht funktionieren können wir uns gerne mal per Skype oder TS unterhalten^^
Juhu, mein erstes c++ Programm 
|
das problem bei deinem code ist aber, dass du bereits vorher wissen musst, wie viele zahlen maximal eingegeben werden, weil du ja den array vorher eine länge zuweisen musst
|
|
|
25.01.11, 15:54
|
#7
|
Süßstoffbehältnis
Registriert seit: Feb 2009
Beiträge: 9
Bedankt: 6
|
Ja, Stimmt aber da er die Zahlen per hand eingibt und nicht Speichert, nach beendigung des Programms,
dachte ich das 255 reichen^^
Auserdem is das nur eine Lösung, es geht auch ohne Arrays, wie gesagt.
MfG
Pokefreak
__________________
|
|
|
25.01.11, 17:05
|
#8
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 23
Bedankt: 1
|
okay, danke, das reicht mir schon. Ich habe Felder bereits öfters verwendet.
|
|
|
25.01.11, 19:52
|
#9
|
Ist öfter hier
Registriert seit: Jan 2010
Beiträge: 189
Bedankt: 117
|
Zitat:
Zitat von BastiR1991
Code:
#include <iostream>
using namespace std;
//diese Funktion wird immer 1 zurückgeben (Ausnahme bei -1), AllNumbers muss global definiert sein, oder in die Funktion übergeben werden
int CountNumbers (int Number) {
int AllNumbers=0;
bool Break=false;
while (Break == false) {
if (Number != -1)
AllNumbers++;
else
Break == true;
}
return AllNumbers;
}
//gleiches Problem wie bei der Funktion davor
int CountNumbersOver1000 (int Number) {
int NumbersOver1000 = 0;
bool Break = false;
while (Break == false) {
if (Number != -1) {
if (Number > 1000)
NumbersOver1000++;
}
else
Break == true;
}
return NumbersOver1000;
}
int main () {
int NumIn=0;
cout << "Geben Sie eine Zahl ein: ";
cin >> NumIn;
cout << "Anzahl Zahlen = "<< CountNumbers (NumIn) << endl;
cout << "Anzahl Zahlen Größer 1000 = "<< CountNumbersOver1000 (NumIn) << endl;
}
|
Kommentare im Code.
Wieso nutzt du eigentlich While-Schleifen, wenn du sowieso nur eine Zahl kontrolierst?
-Counter in der main definieren und an die Funktionen übergeben.
-whileschleien löschen
Spaß haben
Zitat:
Zitat von pokefreak
Dein Programm ist leider vom grundsatz her total Falsch.
Wenn du alles erklärt haben willst, auch warum deins nicht funktionieren können wir uns gerne mal per Skype oder TS unterhalten^^
Juhu, mein erstes c++ Programm
Edit: es gibt auch einen weg ohne Arrays, denke das wäre einfacher für dich, bei bedarf kann ich diesen auch noch benutzen
|
Das Programm ist nicht grundsätzlich falsch, nur ein paar Fehler sind halt drin...
Problem bei deinem Ansatz:
Fehlermeldung wegen Bad memory access. (Feld wird auf 20 Stellen begrenzt, werden 21 eingegeben --> buff)
Lösung:
Dynamisches anpassen des Arrays wenn es droht "überzulaufen"
__________________
Make the world a prettier place - get a bikini wax!
|
|
|
26.01.11, 20:23
|
#10
|
Anfänger
Registriert seit: Nov 2010
Beiträge: 1
Bedankt: 0
|
#include <iostream>
using namespace std;
int AllNumbers=0;
int NumbersOver1000 = 0;
void CountNumbers (int Number) {
if (Number != -1)
AllNumbers++;
}
void CountNumbersOver1000 (int Number) {
if (Number != -1) {
if (Number > 1000)
NumbersOver1000++;
}
}
int main () {
int NumIn=0;
while(NumIn!=-1){
cout << "Geben Sie eine Zahl ein: (-1 bricht das Programm ab)";
cin >> NumIn;
CountNumbers (NumIn);
CountNumbersOver1000 (NumIn);
}
cout << "Anzahl Zahlen = "<< AllNumbers << endl;
cout << "Anzahl Zahlen Größer 1000 = "<< NumbersOver1000<< endl;
}
Das ist eine Lösung, ohne Array zu verwenden
|
|
|
27.01.11, 19:44
|
#11
|
Anfänger
Registriert seit: Jan 2011
Beiträge: 1
Bedankt: 0
|
Mhh..
C++ ist meine schwäche sorry.
C# aber profi.
|
|
|
29.01.11, 08:45
|
#12
|
Anfänger
Registriert seit: Apr 2009
Beiträge: 4
Bedankt: 2
|
Wenn du C# Profi bist, solltest du dich mit Arrays, Schleifen usw... auch auskennen, das ist dort auch vorhanden.
|
|
|
31.01.11, 09:18
|
#13
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
Hallo! Könnt ihr mir bitte bei der Aufgabe helfen. Habe morgen Prüfung, bin aber nicht gut in Programmierung. Danke.
Die Kreiszahl pi soll mit einem Programmnach dem Monte-Carlo-Verfahren
abgeschätzt werden. Hierzu werden 1000 zufällige Punkte (x,y) mit x und
y-Werten zwischen 0 und 1 erzeugt. Die Kreiszahl pi ergibt sich aus der
Anzahl n der Punkte innerhalb des Einheitskreises nach der Formel
pi=4*n/1000
Schreiben Sie ein C++-Programm, das die Zahl pi nach diesem Verfahren
berechnet und auf dem Bildschirmausgibt.
Hinweise:
- x=(double)rand()/(double)RAND_MAX erzeugt einen double-Zufallswert x zwischen 0 und 1.
- Binden Sie für rand() und RAND_MAX die Header-Datei stdlib.h ein.
- Ein Punkt (x,y) liegt innerhalb des Einheitskreises, wenn x^2 +y^2 < 1 gilt.
Habe da schon was zusammengebastelt :-) Grausam.
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
srand(time(0));
double x,y,p,z,pi,n;
for (int i=1; i<=1000; i++){
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
z=pow(x,2)+pow(y,2);
if (z<1){
p=ceil(z);
//cout << z << " "<< p << endl;
}
}
pi=4*n/100;
cout << pi << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
|
|
|
31.01.11, 09:23
|
#14
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
^
^
^
Wie komm ich auf die richtige Anzahl von x^2+y^2<0 ?
|
|
|
31.01.11, 13:02
|
#15
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
Zitat:
Zitat von flex83
Hallo! Könnt ihr mir bitte bei der Aufgabe helfen. Habe morgen Prüfung, bin aber nicht gut in Programmierung. Danke.
Die Kreiszahl pi soll mit einem Programmnach dem Monte-Carlo-Verfahren
abgeschätzt werden. Hierzu werden 1000 zufällige Punkte (x,y) mit x und
y-Werten zwischen 0 und 1 erzeugt. Die Kreiszahl pi ergibt sich aus der
Anzahl n der Punkte innerhalb des Einheitskreises nach der Formel
pi=4*n/1000
Schreiben Sie ein C++-Programm, das die Zahl pi nach diesem Verfahren
berechnet und auf dem Bildschirmausgibt.
Hinweise:
- x=(double)rand()/(double)RAND_MAX erzeugt einen double-Zufallswert x zwischen 0 und 1.
- Binden Sie für rand() und RAND_MAX die Header-Datei stdlib.h ein.
- Ein Punkt (x,y) liegt innerhalb des Einheitskreises, wenn x^2 +y^2 < 1 gilt.
Habe da schon was zusammengebastelt :-) Grausam.
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
srand(time(0));
double x,y,p,z,pi,n;
for (int i=1; i<=1000; i++){
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
z=pow(x,2)+pow(y,2);
if (z<1){
p=ceil(z);
//cout << z << " "<< p << endl;
}
}
pi=4*n/100;
cout << pi << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
|
Hat sich erledigt. Danke.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.
().
|