Forum
Tipps
News
Menu-Icon

Aufgaben

guten Tag,
1.ich weiß nicht ob man sowas hier darf aber: ich verstehe das mit den arrays in c++ nicht: http://www.schornboeck.net/ckurs/array.htm
hier unten die Aufgabe: Schreibe ein Programm, welches die ersten 10 Elemente der 2er Rheie (2,4,8,16,32,...) in ein array schreibt und diese dann rückwerts ausgibt.
Dahinter steht die Lösung, die sogar nicht funktioniert.
Was mich vollkommen verwirrt ist, dass die [10] hinter reihe einfach verschwindet und ein auftaucht.   ......
Ich sitze heute schon den ganzen Tag dran und google sogar und verstehe gar nichts.  :'(  Wie habt ihr das gelernt?

2. Aufgabe: Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer vierstelligen Zahl auffordert. Das Programm soll daraufhin die Quersumme der vierstelligen Zahl errechnen und das Ergebnis auf den Bildschirm ausgeben.

 ich schrieb:
#include <iostream>
#include <string>
using namespace std;

int main()
{
  cout << "Geben sie  Zahlen ein: " << flush;
  int i[4];
  cin >> i[0]
  cin >> i[1]
  cin >> i[2]
  cin >> i[3]
  cout << i[0] + i[1] + i[2] + i[3] << endl;
}

sind 4 unterschiedliche Zahlen, ich wusste nicht, wie ich das machen sollte  :-X

ich hoffe auf Antworten  :D  

« Letzte Änderung: 30.03.10, 17:41:44 von gordasch »

Antworten zu Aufgaben:

Aufgabe 1:
Hast du dich schon mit variablen aueinandergesetzt?
Hast du dich schon mit Schleifen auseinandergesetzt?
<- i-tes element der reihe

for(int i = 0; i < 10; i++)
{
// body
}
durchlaufe body
für i = 0
in schritten i = i + 1
solange i < 10 ist.
i nimmt also die werte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 in dieser reihenfolge an. - 10 Felder werden korrekt durchlaufen (1. element ist 0)

Aufgabe 2:
//if, Vergleich & logische Verknüpfung
if(iEingabe < 10000 && iEingabe > 999)
{
//eingabe okay, also tue
}
// Divison & "verkürzen" der zahl
iEingabe = 9876;
i[0] = iEingabe / 1000; // = 9
iEingabe = iEingabe - i[0] * 1000;
i[1] = (iEingabe / 100);  // = 98 % 10 = 8
iEingabe = iEingabe - i[1] * 100;
i[2] = iEingabe / 10;
iEingabe = iEingabe - i[2] * 10;
i[3] = iEingabe;
obiges geht natürlich auch eleganter. hier einfach mal nur basis rechenoperationen. Modulodivisionen solltest du aber auch mal anschaun.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

juhu  :D:D:D:D das habe ich geschrieben:

Aufgabe 2:

#include <iostream>
using namespace std;

int main()
{
  int iEingabe;
  cout << "geben sie eine 4-ställige Zahl ein" << endl;
  cin >> iEingabe;
  if (iEingabe < 10000 && iEingabe > 999)
  {
    int i[4];
    i[0] = iEingabe / 1000;
    i[1] = (iEingabe-i[0]*1000) / 100;
    i[2] = (iEingabe-((i[0]*1000)+(i[1]*100))) / 10;
    i[3] = iEingabe -((i[0]*1000)+(i[1]*100)+(i[2]*10));
    cout << i[0] + i[1] + i[2] + i[3] << endl;
  }
}

Und die Lösung von Aufgabe 1 ging auch, weiß nicht was ich vorher falsch gemacht habe. Ich bin mir aber nicht sicher ob ich das richtig verstanden habe.

Weitere Fragen kommen sicher bald in diesen Thread rein.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

#include <iostream>
using namespace std;

int main()
{
  cout << "geben sie eine Zahl ein " << endl;
  int eingabe;
  cin >> eingabe;
  int i;
  for(i=2; i<eingabe; i++)
  {
    eingabe % i;
  }
  if(eingabe % i == 0)
  {
    cout << "Die eingegebene Zahl ist keine Priemzahl" << endl;
  }
  else if(eingabe % i == 1)
  {
    cout << " Die eingegebene Zahl ist eine Priemzahl" << endl;
  };
}

1.was habe ich falsch gemacht? Ich habe schon richtig lang herungetüftelt, kamen viele unterschiedliche Ergebnisse raus?
2.wie kann die vorherige Aufgabe 2 mit einer schleife machen?

1. Beschreib mir mal wie du ermittelst ob eine Zahl eine Primzahl ist.
2. Beschreib mir die Regelmäßigkeiten in deiner Aufgabe 2
(hierzu, versuch bspw. deine indizes ([0], [1], ....) mal als von "i" abhängig zu beschreiben. Und wie lässt sich 10, 100, 1000, 10000,... anders ausdrücken? ;) )

Wenn die punkte erfüllt sind helf ich dir gern auf die Lösung ;)  

« Letzte Änderung: 30.03.10, 23:35:07 von Klischeepunk »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

erstmal zu 1:
Man gibt die Zahl eingabe ein.
In der for-schleife wird das i, in eingabe % i von 2 aus soweit erhöht, bis es den gleichen Wert, wie eingabe hat.
(ich habe vorher spekuliert, dass der Operator <= besser passen würde, aber beides ging nicht).
Nun folgt if was sicher falsch vormuliert ist.
Es soll seine Funktion starten, wenn das Ergebnis auf for 0 ergibt.
Beim else eben das gegenteil. Else selbst würde wahrscheinlich schon reichen.

zu Aufgabe 2 :

1. Die vorherigen werte wurden immer zusammengerechnet und von der Gesamtzahl abgezogen.
2. Je nach nullställen wurden die einzelnen variabeln geteilt.
 

« Letzte Änderung: 31.03.10, 00:04:51 von gordasch »

Das ist gelaber ;) keine beschreibung.

1. Primzahlen definieren sich dadurch, dass sie welche eigenschaft haben?

2. Auch hier: Versuch rechenregeln aufzustellen.
Wie verändert sich bspw. dein Wert 1000 in jedem Schritt?
Wie würde sich das in einer "for" schleife ausdrücken lassen?
 

Einen kleinen Tipp zu Primzahlen können wir ja geben. ;)

@gordasch Schau Dir mal "Modulo" an!
 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Das ist gelaber ;) keine beschreibung.

1. Primzahlen definieren sich dadurch, dass sie welche eigenschaft haben?

2. Auch hier: Versuch rechenregeln aufzustellen.
Wie verändert sich bspw. dein Wert 1000 in jedem Schritt?
Wie würde sich das in einer "for" schleife ausdrücken lassen?
 

ich Antworte mal schnell habe gerade k.Zeit:
1. Primzahlen können sich nur durch 1 und sich selber teilen.
2. Der wert 1000 der durch die erste Variable geht teilt sich durch 10 bis die zweite Variable sich durch ihn teilt.
3. Habe ich Modulo denn nicht schon verwendet? ( % )?

Warum versucht du die "potentiellen Primzahlen" dann durch 2 oder deine letzte Eingabe zu teilen?
Das sieht so aus als dürfte da ziemliches Chaos geschehen wenn du das Programm probierst.

Halt dich mal an folgendes:
Lies eine Zahl
Teile Zahl durch 2 bis Zahl und prüfe ob sie durch einen Wert < Zahl teilbar ist.
Wenn ja ist es keine Primzahl.
Wenn nein ist es eine Primzahl.

Tip: Datentyp bool

Mh was deine Aufgabe 2 angeht. Ich glaub so wie du sie momentan ausgedrückt hast ist es wirklich schwer auf die Lösung zu kommen.

i[0] = iZahl % 10;  // lässt sich auch ausdrücken als (iZahl % 10) / 1
i[1] = (iZahl % 100) / 10;
i[2] = (iZahl % 1000) / 100;
...

Versuchs mal hiermit. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Zitat von: Klischeepunk 

i[0
= iZahl % 10;  // lässt sich auch ausdrücken als (iZahl % 10) / 1
i[1] = (iZahl % 100) / 10;
i[2] = (iZahl % 1000) / 100;
...

Versuchs mal hiermit. 

cin >>a;

  while (a > 0)
  {
    iQuersumme += a % 10;
    a /= 10;
  }


so? (das geht wunderbar) nur mir fehlt das "programmierische" können das in eine for-schleife zu packen. Wie initialisiere ich eine Zahl, die man selbst eingeben muss in der ersten eingabe der for-schleife?

ps:
ich musste mich erstmal aufklären, was % für eine Rechenart ist dazu habe ich folgendes geschrieben ^^ und habe ganz viele Zahlen ausprobiert, bis ich aufs Ergebnis kam : REST ;D  :-[:
#include <iostream>
using namespace std;

int main()
{
  int f;
  int k;
  int c;
  for (c = 0; c < 100; c++)
  {
  cin >> f;
  cin >> k;
  cout << f % k << endl;
  }

Bingo du hast die lösung.
wenn du while (a>0) hast kannst du genau das in die for-schleife übernehmen.

for(;a > 0; a /= 10) // müsste imho gehen, schmeiss einfach die a/= zeile

primzahl: warum liest du zahlen innerhalb der schleife? Und wieso läufst du bis 100? der bereich von 2 bis zahl muss nicht bei 100 enden.  - ansonsten wie gesagt:

bool!
 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

[quote author=Klischeepunk
primzahl: warum liest du zahlen innerhalb der schleife? Und wieso läufst du bis 100? der bereich von 2 bis zahl muss nicht bei 100 enden.  - ansonsten wie gesagt:

bool!
 

Zitat

das gerade war nur n nebenprogramm um 100 mal die chance zu haben, seine gewünschte % rechnung zu machen. Das Programm geht hat aber nichts mit primzahlen zu tun  ;D . Einfach das mit i>100 nicht beachten.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Nochmal Aufgabe1:

#include <iostream>
using namespace std;

int main()
{
  int a;
  int iQuersumme = 0;

  cout<<"Zahl eingeben: ";
  cin >>a;

  for(a > 0; a/=10;)
  {
    iQuersumme += a % 10;
  }

  cout<<endl<<"Die Quersumme ist "<<iQuersumme;

}

Er compiliert ohne Probleme, doch er lässt die lätzte Zahl weg.
(für 456, 9. Für 4, 0 . Für 4567, 15 ...)

edit: vermutlich rechnet er zuerst die a/=10 und macht dann weiter.

« Letzte Änderung: 31.03.10, 17:20:42 von gordasch »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

so ich habe gerade versucht ein Programm zu schrieben, mit dem man, den kleinsten gemeinsammen nenner zweier Zahlen bestimmen kann (doch es geht nicht egal, welche Zahlen man reinschriebt).

erst schrieb ich

whine (a%i=0 && b%i=0)
{
  i=i++
}
(also ohne Rechtschreibfehler ;D)
oder so es ging nicht, ich konnts mir absolut nicht erklären.
Kompillieren tats schon.

Danach:
#include <iostream>
using namespace std;

int main()
{
  int a;
  int b;
  cin >> a;
  int c = a;
  int d = b;
  cin >> b;
  int i;
  for (i=2; i < a || i < b; i++)
  {
    a = a % i;
    b = b % i;
    if (a % i < 0 || b % i < 0)
    {
      cout << i << " ist der kleinste gemeinsamme nenner!" << endl;
    }
    a = c + 0;
    b = d + 0;
  }
  if (i < a || i < b)
  {
    cout << "gammel weiter" << endl;
  }
}


und es passiert absolut garnichts, auser, dass das Programm die variabeln entgegennimmt.


edit: iwie habe ich mit der Priemzah hinbekommen (ich habe versucht nachzukonstruieren, wie es wäre mit bool drinne (ich verstehe nicht, wieso das unbedingt drin sein muss) wäre). Aber (die oberen Fragen nicht vergessen ;D) schauts euch einfach mal an:

include <iostream>
using namespace std;

int main()
{
  int zahl;
  cin >> zahl;
  bool ggh;
  for(int i = 2; i < zahl; i++)
  {
    ggh = true;
    if(zahl % i == 0 && zahl != i)
    {
      ggh = false;
      cout << "sie ist keine!" << endl;
      break;
    }
    if(ggh == true)
    {
      cout << zahl << "ist eine Priemzahl" << endl;
      break;
    }
  }
}

« Letzte Änderung: 31.03.10, 22:27:51 von gordasch »

Die boolean muss nicht drin sein, es kann dir nur das leben massiv einfacher machen.
Nachdem du korrekte abbruchbedingungen gefunden hast, kannste dir die getrost in die haare schmieren, nur wenn du die gesamte schleife durchlaufen lässt reicht einmal b = true; oder b=false; und schon kannste dich am ende der schleife daran orientieren.

Es gibt immer "viele" Wege die nach Rom führen, es gibt viele richtige Lösungen, ich bin bei dir ja dazu übergegangen dir ausschließlich n Tip hinzuwerfen und du greifst das auf und arbeitest damit - da kann was grundsätzlich anderes rauskommen als das was ich im kopf hatte, was aber letztendlich zum gleichen ergebnis führt ;)

so long mal. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Mensch iwie klappt nichts, immer wenn ich bestimmte programme starte geht nichts nach Plan:

Hier 1. ein Praogramm welches den kleinsten gemeinsammen Teiler bestimmen soll wo liegt der fehler (ich sitze schon ne Zeit dran  :'( ) :

#include <iostream>
using namespace std;

int main()
{
  int a, b;
  cin >> a;
  cin >> b;
  bool wert;
  for(int i = 2; i <= a || i <= b; i++)//ja sollte solange ausführen bis if passt.
  {
    wert = true;
    if(a % i == 0 && b % i == 0) //ehm erst wenn es kein Rest gibt sollte i ausgegeben werden ... kann man ja ablesen
    {
      cout << i << endl;
      break;
    }
    if(a % i != 0 && b % i != 0) //man glaubt hier sitzt der Fehler aber nein, die schleife geht ja weiter bis i den wert von a oder b erreicht hat.
    {
      wert = false;
    }
   
    if(wert == false)
    {
      cout << "es gibt keinen kgT " << endl;
      break;
    }
  }
}

2.Ein Programm, welches 4 Werte nach größe ordnen muss (ok ich weiß man sollte es mit max min machen, aber ich will es so schaffen) :

#include <iostream>
using namespace std;

int main()
{
  int i[3];
  cin >> i[0];
  int b = i[0];
  cin >> i[1];
  int c = i[1];
  cin >> i[2];
  int d = i[2];
  cin >> i[3];
  int e = i[3];
  while (i[0] >= 0 && i[1] >= 0 && i[2] >= 0 && i[3] >= 0 )
  {
    --i[0];
    --i[1];
    --i[2];
    --i[3];
    if(i[0] == 0 || i[1] == 0 || i[2] == 0 || i[3] == 0)//der Sinn besteht dadrin die werte (normale) solange zu subtrahieren, bis sie 0 ergeben und dann den alten wert wiederzugeben
    {
      if(i[0] = 0)
      {
        cout << b << endl;
      }
      if(i[1] = 0)
      {
        cout << c << endl;
      }
      if(i[2] = 0)
      {
        cout << d << endl;
      }
      if(i[3] = 0)
      {
      cout << e << endl;
      }
    }
  }
}


Hoffe ihr könnt mir helfen.  :-\ 

« Letzte Änderung: 01.04.10, 12:26:07 von gordasch »

« index.html komplizert oder doch nicht?kleines Problem in C »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Tag
Ein Tag ist ein englischer Begriff und bedeutet so viel wie Etikett, Mal, Marke, Auszeichner und Anhänger. Generell ist Tag eine Auszeichnung eines Datenbetandes mit...

Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...