Arrays < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:33 Di 05.01.2010 | Autor: | az118 |
Aufgabe | Schreiben Sie C-Funktionen zur Berechnung
a.) des größten Wertes max(x1,...,xn)
eines Eingabearrays aus Integern x1,...,xn, deren Betrag jeweils kleiner als [mm] 10^{9} [/mm] ist. |
Hallo,habe das mal versucht, aber die Ausgabe ist falsch.
Nur wo liegt der Fehler?
#include <stdio.h>
int max(int array[],int laenge){
int i,max=1000000000;
for(i=0;i<laenge;i++){
if (array[i]>max)
max=array[i];
}
return max;
}
int main(){
int array[5]={3,2,2,1,4};
printf("Der groesste Wert lautet: %i",max(array,5));
[mm] while(getchar()!='\n');
[/mm]
}
|
|
|
|
> Schreiben Sie C-Funktionen zur Berechnung
>
> a.) des größten Wertes max(x1,...,xn)
>
> eines Eingabearrays aus Integern x1,...,xn, deren Betrag
> jeweils kleiner als [mm]10^{9}[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
ist.
> Hallo,habe das mal versucht, aber die Ausgabe ist falsch.
> Nur wo liegt der Fehler?
>
> #include <stdio.h>
>
> int max(int array[],int laenge){
> int i,max=1000000000;
du setzt hier max auf 10^9
>
> for(i=0;i<laenge;i++){
> if (array>max)
hier schaust du, ob die zahl im array größer als max ist, was alle 100% nicht sein werden
> max=array;
> }
> return max;
> }
>
> int main(){
> int array[5]={3,2,2,1,4};
>
> printf("Der groesste Wert lautet: %i",max(array,5));
>
> [mm] while(getchar()!='\n');[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> }
du könntest max auf 0 setzen (wenn keine negativen zahlen vorkommen), ansonsten versteh ich den hinweis auf die 10^9 zahlen nicht. gibts da noch mehr infos?
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:45 Di 05.01.2010 | Autor: | az118 |
Nein, mehr Infos gibt es zu der Aufgabe leider nicht. Versteh das mit der [mm] 10^9 [/mm] auch nicht so.
Ok,die Ausgabe stimmt wenn ich max=0 setze,aber die [mm] 10^9 [/mm] muss ich sicher irgendwo unterbringen?
|
|
|
|
|
> Nein, mehr Infos gibt es zu der Aufgabe leider nicht.
> Versteh das mit der [mm]10^9[/mm] auch nicht so.
>
> Ok,die Ausgabe stimmt wenn ich max=0 setze,aber die [mm]10^9[/mm]
> muss ich sicher irgendwo unterbringen?
is mir grad aufgefallen.. es heisst ja der betrag sei kleiner als [mm] 10^9 [/mm] sei... also nimmst du als maximum [mm] -10^9 [/mm] und fertig
gruß tee
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:15 Di 05.01.2010 | Autor: | az118 |
Super danke.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:19 Di 05.01.2010 | Autor: | az118 |
Aufgabe | Schreiben Sie C-Funktionen zur Berechnung
b.) der mittleren Abweichung e=((x1-x)+...+(xn-x))/n
eines Eingabearrays aus Integern x1,...,xn, deren Betrag jeweils kleiner als [mm] 10^9 [/mm] ist. |
Habe noch die Aufgabe b versucht, weiß da allerdings gar kein Anfang.
Könnte mir da jemand helfen?
|
|
|
|
|
> Schreiben Sie C-Funktionen zur Berechnung
>
> b.) der mittleren Abweichung e=((x1-x)+...+(xn-x))/n
kann es sein dass hier betragsstriche in der aufgabe angegeben sind?
>
> eines Eingabearrays aus Integern x1,...,xn, deren Betrag
> jeweils kleiner als [mm]10^9[/mm] ist.
> Habe noch die Aufgabe b versucht, weiß da allerdings gar
> kein Anfang.
> Könnte mir da jemand helfen?
kannst du denn mit worten beschreiben was da passiert?
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:43 Di 05.01.2010 | Autor: | az118 |
Ja das sollten Betragsstriche sein.
Also x wäre der Mittelwert der Zahlen.Und ich soll nun den Mittelwert von jeder einzelnen Zahl subtrahieren,dann alles aufsummieren und durch die Anzahl der angegebenen Zahlen dividieren?
|
|
|
|
|
> Ja das sollten Betragsstriche sein.
> Also x wäre der Mittelwert der Zahlen.Und ich soll nun
> den Mittelwert von jeder einzelnen Zahl subtrahieren,dann
> alles aufsummieren und durch die Anzahl der angegebenen
> Zahlen dividieren?
ja im ersten durchgang den mittelwert bilden aus den elementen des array (forschleife, aufsummieren, teilen durch anzahl der elemente)
in der nächsten forschleife dann den mittelwert von den einzelnen elementen abziehen (betrag nicht vergessen. siehe abs(..) mit ner math.h include), alles aufsummieren und wieder durch die anzahl der elemente teilen
so dann mal ran ans coden
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:33 Di 05.01.2010 | Autor: | az118 |
Ok,habe jetzt nur mal ein Programm zur Berechnung des Mittelwertes geschrieben,um zu testen,ob es soweit stimmt. Allerdings muss da wieder ein Fehler sein,da die Ausgabe nicht stimmt?
#include <stdio.h>
#include <math.h>
double average(int array[], int laenge){
int i,sum=0;
double l=laenge;
for(i=0;i<laenge;i++){
sum+=array[i];
}
return sum/l;
}
int main(){
int array[5]={2,3,1,4,2};
printf("Der Mittelwert lautet: %i",average(array,5));
while(getchar()!=' \ n ');
}
|
|
|
|
|
du hast nur nen winzigen fehler.. der mittelwert wird in einer double gespeichert, im printf versuchst du jedoch den double als integer auszugeben:
...%i muss zu %f werden
dann klappt das programm auch wunderbar
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:10 Di 05.01.2010 | Autor: | az118 |
Ja klar,klappt jetzt.
Ok,die nächste forschleife hätte ich jetzt so geschrieben:
for(i=0;i<laenge;i++){
e=abs(array[i]-sum/l);
sumend+=e;
}
return sumend/l; ???
|
|
|
|
|
> Ja klar,klappt jetzt.
> Ok,die nächste forschleife hätte ich jetzt so
> geschrieben:
>
> for(i=0;i<laenge;i++){
> e=abs(array-sum/l);
> sumend+=e;
> }
> return sumend/l; ???
wenn sum die summe der einzelelemente ist und l die anzahl der elemente siehts richtig aus
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:21 Di 05.01.2010 | Autor: | az118 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Und wie verknüpfe ich die beiden forschleifen?wenn ich die einfach untereinander schreibe,wird nur die erste schleife berechnet.
#include <stdio.h>
#include <math.h>
double average(int array[], int laenge){
int i,sum=0;
double l=laenge;
double e,sumend=0;
for(i=0;i<laenge;i++){
sum+=array[i];
}
return sum/l;
}
for(i=0;i<laenge;i++){
e=abs(array[i]-sum/l);
sumend+=e;
}
return sumend/l;
}
int main(){
int array[5]={2,3,1,4,2};
printf("Der Mittelwert lautet: %f",average(array,5));
while(getchar()!='\n');
}
|
|
|
|
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
#include <stdio.h>
#include <math.h>
double average(int array[], int laenge){
int i;
double sum=0;
double l=laenge;
double e,sumend=0;
for(i=0;i<laenge;i++){
sum+=array[i];
}
//return sum/l;
//} die 2 zeilen sind rauszunehmen, die return sonst sofort ausgegeben wird, du willst aber ja noch mit der sum weiterrechnen
printf("summe gesamt:%f, elemente: %f\n",sum,l);
for(i=0;i<laenge;i++){
e=abs(array[i]-(sum/l));
printf("e: %f= %d - %f\n",e,array[i],sum/l);
sumend+=e;
}
return sumend/l;
}
int main(){
int array[7]={4,5,6,7,5,4,3};
printf("\nDer Mittelwert lautet: %f",average(array,7));
while(getchar()!='\n');
}
hab oben 2 zeilen reinkommentiert
gruß tee
ps. erstaunlich dass mit dem gleichen code bei 2 verschiedenen compilern was unterschiedliches rauskommt
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:59 Di 05.01.2010 | Autor: | az118 |
Ok,danke.
hab das jetzt mit nen paar werten probiert,klappt alles.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:01 Di 05.01.2010 | Autor: | az118 |
Achso,mir fällt gerade auf,dass ich die [mm] 10^9 [/mm] gar nicht benutzt habe?
|
|
|
|
|
Status: |
(Antwort) noch nicht fertig | Datum: | 19:23 Di 05.01.2010 | Autor: | fencheltee |
> Achso,mir fällt gerade auf,dass ich die [mm]10^9[/mm] gar nicht
> benutzt habe?
war das für die gesamte überschrift oder stand das bei jeder teilaufgabe nochmal explizit dran?
ansonsten ist das vielleicht noch von "früher" auf 16 bit rechnern, wo ein int nur 2^16 zu stände hatte und man daher den datentyp long nutzen musste?! oder wurde evtl noch was anderes übersehen?
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:02 Di 05.01.2010 | Autor: | az118 |
Ja das stand über beide Aufgaben,also a und b.
Also muss ich das noch irgendwie in die aufgabe einbauen?
|
|
|
|
|
> Ja das stand über beide Aufgaben,also a und b.
> Also muss ich das noch irgendwie in die aufgabe einbauen?
sinnvoll ist die verwendung nur beim maximum, also teil a.
evtl sinnvoll ist es noch falls du es auf ner alten kiste benutzt die nen int mit 16 bit anlegt, statt 32, dann würdest du nur zahlen von -32767 .. 32767 darstellen können statt -2147483647 .. 2147483647. aber auf den heutigen 32 bit rechnen ist int32 glaube standard? von daher..
gruß tee
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:16 Di 05.01.2010 | Autor: | az118 |
Gut,dann werde ich da auch nichts mehr verändern.
Danke
|
|
|
|