Array berechnen
-
Will sagen, liefere den konkreten Code mit den kritischen Stellen, dann findet sich vielleicht eher jemand, der sie korrigiert.
-
int[] arr = new[] { 2, 3, 3, 0, 4, 4, 4, 5 }; int result = 0; int count = 1; for (int i = 1; i <= arr.Length; ++i) { if (i < arr.Length && arr[i] == arr[i - 1]) { count++; } else { result += (count * arr[i - 1]) * (count * arr[i - 1]); count = 1; } }
-
du hast C# Code gepostet, auch wenn die Syntax zu C sehr ähnlich ist, ist C# dennoch kein C. Bitte Thread verschieben.
-
supertux schrieb:
du hast C# Code gepostet, auch wenn die Syntax zu C sehr ähnlich ist, ist C# dennoch kein C. Bitte Thread verschieben.
Ich denke noch, daß Anfänger86 C will. Der C#-Code kann als Hinweis verstanden werden.
-
ach so, hab gar nicht beachtet, dass "Kaffe" nicht der Thread-Ersteller ist.
-
#define ANZ 8 int main (void) { int i = 0, k = 0, erg = 0, zahl = 0, cnt = 1; int zahlen[ANZ] = { 2, 3, 3, 0, 4, 4, 4, 5 }; while (i < ANZ) { zahl = 0; cnt = 1; while (zahlen[i] == zahlen[i + cnt]) cnt++; for (k = i; k < i + cnt; k++) zahl += zahlen[k]; printf ("\nSumme: %d", zahl); zahl *= zahl; printf ("\nQuadrat: %d\n", zahl); erg += zahl; i += cnt; } printf ("\nErgebn.: %d\n", erg); }
So oder so ähnlich könnte vielleicht eine Lösung unter ANSI C aussehen.
Da ich da aber totaler Grünschnabel bin, würde ich mich über jegliche Kritik sehr freuen.
Beste Grüße
Chris
-
ChrisBT schrieb:
#define ANZ 8 int zahlen[ANZ] = { 2, 3, 3, 0, 4, 4, 4, 5 };
Das kann man einfacher anpassbar machen, indem man das define weglässt und stattdessen
int anz = sizeof zahlen / sizeof *zahlen
schreibt.
for (k = i; k < i + cnt; k++) zahl += zahlen[k];
Einfacher:
zahl = zahlen[k]*cnt;
Dann kann man auch die Deklarationen von cnt und zahl in den Schleifenrumpf ziehen.
Da ich da aber totaler Grünschnabel bin, würde ich mich über jegliche Kritik sehr freuen.
Done
-
wow, da ist ja einiges passables.
ANZ gibt die Anzahl der Zahlen, ok, was ist denn wenn dieser variiert?
Ist das möglich, dass das Array nach Anzahl der übergebenen Werte erstellt wird?
Oder ist es möglich, dass ich einfach ein Array der Größe 100 nehme, und davon nur 10 Stellen besetze?
Ist es generell so, dass wenn ich weniger Zahlen belege, als ich vorher festgelegt habe, die anderen Stellen auf '0' gesetzt werden?zb int array[5]
array[0] = 1; array[1] = 2; array[2] = 4.
wären array[3] oder array[4] automatisch 0?
-
ChrisBT schrieb:
cnt = 1; while (zahlen[i] == zahlen[i + cnt]) cnt++;
Das läuft u.U. über die Grenze hinaus, falls dort passende Werte stehen; ->undefiniertes Verhalten -> durchgefallen.
-
#define ANZ 8 int a[ANZ] = {2, 3, 3, 0, 4, 4, 4, 5}, *p=a+ANZ, sum=0; while( p-- != a ) { int zs=*p; while( p!=a && *(p-1)==*p ) zs += *p--; sum += zs*zs; }
-
Wutz schrieb:
#define ANZ 8 int a[ANZ] = {2, 3, 3, 0, 4, 4, 4, 5}, *p=a+ANZ, sum=0; while( p-- != a ) { int zs=*p; while( p!=a && *(p-1)==*p ) zs += *p--; sum += zs*zs; }
und wenn ich ein Array vorher belegt habe, muss man es extra so notieren, wie es befüllt worden ist {2, 3, 3, 0, 4, 4, 4, 5}?
wenn ich ein 10 stelliges Array habe mit dem Namen array1, wie muss ich dieses hantieren?
-
- Natürlich nicht.
- Indem du p auf das ende deines arrays zeigen läßt, z.B. p=array1+10.
Das sollte wohl nicht zu schwer sein zu begreifen.
-
ok,
jedoch muss dieses beim Array immer wieder explizit definiert werden.
Wie ist es denn, wenn ich
mein Array 'a' mit den Werten {2, 3, 3, 0, 4, 4, 4, 5} befüllt habe, ich das Array aber im einige Einträge und Größe ändere?
Was wird aus {1, 2, 3, 3, 0, 4, 4, 4, 5, 5}?
Dann müsste wieder alles verändert werden mit ANZ und den anderen Sachen.
Gibt es keine leichteren Lösungen für solch ein Problem.
Gehen, denn keine etlichen ifSchleifen?
wie zBfor (i = 0; i < 99; i++){ if (a[i] == a[i+1]){ if (a[i] == a[i+2]){ if (a[i] == a[i+3]){ e3 = a[i+2]+a[i+3]; printf("%d, ", e3); } e2 = a[i+1]+e3; printf("%d, ", e2); } e1 = a[i]+e2; printf("%d, ", e1); } }
Ich habe immer ein 100stelliges Array, die Positionen ohne natürliche Zahl sind ansonsten immer 0, aber beim quadrieren ist es ja egal.
ICh würde dieses dann mit 99 forSchleifen machen, hauptsache es funktioniert, jedoch macht es das nicht so ganz...
-
ChrisBT schrieb:
#define ANZ 8 int main (void) { int i = 0, k = 0, erg = 0, zahl = 0, cnt = 1; int zahlen[ANZ] = { 2, 3, 3, 0, 4, 4, 4, 5 }; while (i < ANZ) { zahl = 0; cnt = 1; while (zahlen[i] == zahlen[i + cnt]) cnt++; for (k = i; k < i + cnt; k++) zahl += zahlen[k]; printf ("\nSumme: %d", zahl); zahl *= zahl; printf ("\nQuadrat: %d\n", zahl); erg += zahl; i += cnt; } printf ("\nErgebn.: %d\n", erg); }
So oder so ähnlich könnte vielleicht eine Lösung unter ANSI C aussehen.
Da ich da aber totaler Grünschnabel bin, würde ich mich über jegliche Kritik sehr freuen.
Beste Grüße
Chris
danke chris, das funktioniert
-
Hi!
ich habe ein Array in dem definierte Strings stehen.
Bsp.:adresse [0] = 'h'
adresse [1] = 'a'
adresse [2] = 'l'
adresse [3] = 'l'
adresse [4] = 'o'
adresse [5] = '\0'jetzt möchte ich wissen wie ich daraus bspw. adresse [1] bis adresse [4] in ein seperates array übernehmen kann ohne die einzelnen adressen anzusprechen.
bzw geht sowas? wenn ja bitte ich um hilfe.
-
also wichtig wäre noch, dass ich diese angesprochenen adressen nicht in ein seperates array kopieren will, mit z.b strcpy sondern einfach nur einen zeigen von 'a' bis 'l'richten möchte
-
Anfänger86 schrieb:
danke chris, das funktioniert
Nein das tut es nicht bei anderen Zahlen.
Es gibt funktionierende Lösungen hier. Höre auf mit so einem Unsinn wie den etlichen "ifSchleifen". Lies ein Grundlagenbuch und lern programmieren, statt kaputten Code zu verwenden.