Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » befreundetet Zahlen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.11.2009, 12:26 Uhr
Pamina



So nun im neuen Thema, die neuen Ha sind online und ich hab mich auch schon versucht, aber wieder ne frage...

die aufgabe lautet:

Schreiben Sie mit Hilfe mindestens einer Funktion ein Programm, das heraus ndet, ob fur eine
eingegebene Zahl folgendes gilt:
Es gibt eine zweite Zahl, so dass die Summe der Teiler der eingegebenen Zahl (inkl. der 1 aber
ohne der eingegebenen Zahl selbst) gleich der zweiten Zahl ist und umgekehrt, z.B.:
Teiler von 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Teiler von 284: 1 + 2 + 4 + 71 + 142 = 220


ich hab das programm auch hinbekommen, nur bei primzahlen funktioniert es nicht, ich müsste also irgendwie noch was reinschreiben, was bei Primzahlen ausgibt "dies ist eine Primzahl, daher nur durch sich selbst und 1 teilbar, aufgabenstellugn kann nicht erfüllt werden."
außerdem muss ich den fehler abfangen, wenn buchstaben eingegeben werden...

bloß wie soll ich das wo hinschreiben??? hier mal mein programm:


C++:
#include <iostream>

using namespace std;

int main()
{
    int x=0, y=0; // deklarieren 2er Zahlen
    int sum_teiler_1 = 0, sum_teiler_2 = 0; //  Teiler (um aufzusumieren) initialiserien
    int i;                  //Zählervariable

   cout << "Bitte geben Sie die zu ueberpruefende Zahl ein: ";
   cin >> x;

   cout << endl << "Teiler der eingegebenen Zahl: ";
  
   //Diese Schleife für die eingegebene Zahl
  
   for(i = 1; i<x;i++) // Schleife um Divisionen durchzuführen
   {
    if ( (x%i) == 0)      // Ganzzahldivision
         {
            sum_teiler_1 = sum_teiler_1 + i;
            cout << " + " << i;              
         }
        
   }
    
    cout << endl << "Teiler der Summe der eingegebenen Zahl: ";
    
    y=sum_teiler_1;
   // Schleife für die Summe der Teiler der eingegebenen Zahl
for(i = 1; i<y;i++) // Schleife um alle Divisionen durchzuführen
   {
    if ( (y%i) == 0)      // Ganzzahldivision
         {
            sum_teiler_2 = sum_teiler_2 + i;
            cout << " + " << i;
         }
   }
  
    cout << endl; // Leerzeile
    cout << endl; // Leerzeile
  
   // Noch eine Abfrage ob sum_teiler_1 gleich dem sum_teiler_2 ist
   if ((y == sum_teiler_1) == (x == sum_teiler_2))
   {
   cout << "Summe der Teiler Zahl(1): " << sum_teiler_1 << endl;  
   cout << "Summe der Teiler Zahl(2): " << sum_teiler_2 << endl;  

       cout << endl; // Leerzeile

       cout << "Fuer die Zahl " <<x<< " gibt es die Zahl "<<y<<" , welche die Bedingung : Es gibt eine zweite Zahl,"
                "so dass die Summe der Teiler der eingegebenen Zahl (inkl. der 1 aber"
                " ohne der eingegebenen Zahl selbst) gleich der zweiten Zahl ist und umgekehrt"
                " erfuellt. " << endl;            
   }
   else
   {
  
   cout << "Summe der Teiler Zahl(1): " << sum_teiler_1 << endl;  
   cout << "Summe der Teiler Zahl(2): " << sum_teiler_2 << endl;  
       cout << endl; // Leerzeile
   cout << "Fuer " <<x<< " gibt es keine Zahl, fuer die gilt: "
            "Es gibt eine zweite Zahl, so dass die Summe der Teiler der eingegebenen Zahl (inkl. der 1 aber "
            "ohne der eingegebenen Zahl selbst) gleich der zweiten Zahl ist und "
            "umgekehrt" << endl;            
   }
  
  getchar();getchar();
    return 0;
}







@ao,
schreibe ich nicht mit int sum_teiler_1 = 0, sum_teiler_2 = 0 schon ne funtion? reicht das nciht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.11.2009, 14:31 Uhr
ao

(Operator)


Das sind Variablen, keine Funktionen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.11.2009, 22:53 Uhr
Bruder Leif
dances with systems
(Operator)


Die Berechnung der Teilersumme wird zweimal durchgefuehrt, der Code ist bis auf die Variablennamen identisch. Das ist eine Codeduplikation, die nach Moeglichkeit vermieden werden sollte. Also lieber eine Funktion a la

C++:
int teilersumme(int zahl) { ... }


schreiben und zweimal aufrufen, das macht den Code wesentlich uebersichtlicher. Primzahlen kannst Du recht einfach rausfiltern: Sie sind durch 1 und sich selbst teilbar; was ist dann die Teilersumme einer Primzahl n?

Abgesehen davon ein kleiner Tip vom kurz draufschauen: In der Zeile

C++:
   if ((y == sum_teiler_1) == (x == sum_teiler_2))


sollte das mittlere == durch && ersetzt werden, sonst greift die Abfrage etwas zu oft...

Edit: OK, habs gesehen: Die Abfrage, ob x == sum_teiler_2 reicht aus, der erste Teil ist immer true...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 18.11.2009 um 22:55 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.11.2009, 22:59 Uhr
Bruder Leif
dances with systems
(Operator)


Noch was zur Eingabe von Buchstaben: Wenn cin einen int einlesen soll, der Benutzer aber z.B. "Hallo Welt" eintippt, wird cin ungueltig, die Abfrage

C++:
if (std::cin) {
...
}


schlaegt dann fehl.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.11.2009, 14:16 Uhr
Pamina



hey, danke für eure antworten, haben es hinbekommen (hab mir ne neue arbeitspartnerin gesucht *g*)
konnte nur leider nicht früher antworten da mein Pc irgendwie nich laufen wollte und ich mein fürs forum nicht wusste
sorry

lg pamina
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: