www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Symmetrische Zahlen (C)
Symmetrische Zahlen (C) < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Symmetrische Zahlen (C): Hilfe, Tipp, Korrektur
Status: (Frage) beantwortet Status 
Datum: 13:17 So 09.12.2012
Autor: Mija

Aufgabe
Schreiben Sie ein C-Programm, das in einem vom Benutzer vorgegebenen Zahlenbereich alle Zahlen prüft und dabei alle symmetrischen Zahlen ausgibt. Eine Zahl bereichnen wir als symmetrisch, wenn sie von links nach rechts und von rechts nach links gelesen denselben Wert hat.
Bei Ihrer Eingabe können Sie im Bereich von Zahlen zwischen 0 und 99999 bleiben.

Problem-Teilaufgabe:
b) Schreiben Sie eine Funktion symmetrisch(), die eine ganze Zahl als Parameter bekommt und dann diese Zahl prüft. Ist die Zahl symmetrisch, soll die Funktion eine 1 zurückliefern, sonst eine 0.

Also mein Problem liegt bei meiner booleschen Funktion. Wenn ich z.B. die Zahlen Zahl 1 = 45679 und Zahl 2 = 45900 eingebe, dann kommt z.B. die Zahl 45684 auch als symmetrisch raus.
Eigentlich sollten in diesem Bereich nur 45754 und 45854 symmetrisch sein.

Wie kann ich also meine boolesche Funktion noch verändern, damit ich wirklich nur die symmetrischen rausbekomme?

Hier ist mein C-Code der booleschen Funktion:


//Funktionsdefinition
bool symmetrisch(unsigned int zahl)
{
     int vektor[5];
     int zaehler=0;
     bool sym=true;
     int i;
    
     do
     {
          vektor[zaehler] = zahl%10;
          zahl = zahl/10;
          zaehler++;
     }
     while (zahl>0);
    
     for (i=0; i < zaehler/2; i++)
     {
         if (vektor[i] != vektor[zaehler-1-i])
         {
            return 0;
            break;
         }
         else
         {
             return 1;
             break;
         }
     }
}

        
Bezug
Symmetrische Zahlen (C): Antwort
Status: (Antwort) fertig Status 
Datum: 16:15 So 09.12.2012
Autor: felixf

Moin!

> Schreiben Sie ein C-Programm, das in einem vom Benutzer
> vorgegebenen Zahlenbereich alle Zahlen prüft und dabei
> alle symmetrischen Zahlen ausgibt. Eine Zahl bereichnen wir
> als symmetrisch, wenn sie von links nach rechts und von
> rechts nach links gelesen denselben Wert hat.
>  Bei Ihrer Eingabe können Sie im Bereich von Zahlen
> zwischen 0 und 99999 bleiben.
>  
> Problem-Teilaufgabe:
>  b) Schreiben Sie eine Funktion symmetrisch(), die eine
> ganze Zahl als Parameter bekommt und dann diese Zahl
> prüft. Ist die Zahl symmetrisch, soll die Funktion eine 1
> zurückliefern, sonst eine 0.
>
>  Also mein Problem liegt bei meiner booleschen Funktion.
> Wenn ich z.B. die Zahlen Zahl 1 = 45679 und Zahl 2 = 45900
> eingebe, dann kommt z.B. die Zahl 45684 auch als
> symmetrisch raus.
>  Eigentlich sollten in diesem Bereich nur 45754 und 45854
> symmetrisch sein.
>  
> Wie kann ich also meine boolesche Funktion noch verändern,
> damit ich wirklich nur die symmetrischen rausbekomme?
>  
> Hier ist mein C-Code der booleschen Funktion:
>  
>
> //Funktionsdefinition
>  bool symmetrisch(unsigned int zahl)
>  {
>       int vektor[5];
>       int zaehler=0;
>       bool sym=true;
>       int i;
>      
> do
>       {
>            vektor[zaehler] = zahl%10;
>            zahl = zahl/10;
>            zaehler++;
>       }
>       while (zahl>0);
>      
> for (i=0; i < zaehler/2; i++)
>       {
>           if (vektor != vektor[zaehler-1-i])
>           {
>              return 0;
>              break;
>           }
>           else
>           {
>               return 1;
>               break;
>           }
>       }
> }

Erstmal allgemein. Sowas kann man sehr gut debuggen, indem man in der Funktion eine Ausgabe einbaut, die einmal die Zahl selber ausgibt und dazu den Vektor (also vektor[0], ..., vektor[zaehler-1]). Dann schaust du dir an, was da fuer die problematischen Zahlen drinnensteht, und ueberlegst dann ob (i) die Werte richtig sind und (ii) wenn nicht, warum nicht, und (iii) wenn doch, warum trotzdem das falsche Ergebnis kommt.

Hier ist es so, dass du nur zwei Elemente des Vektors vergleichst und dann schon 0 oder 1 zuruecklieferst, ohne alle anderen Elemente anzuschauen.

LG Felix


Bezug
                
Bezug
Symmetrische Zahlen (C): Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:34 So 09.12.2012
Autor: Mija

Vielen Dank, ich habs jetzt! :)

Bezug
        
Bezug
Symmetrische Zahlen (C): Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 18:17 Sa 15.12.2012
Autor: Mija

Hallo, ich habe bei dieser Aufgabe leider ein neues Problem.
Undzwar würde ich gerne die Anzahl der symmetrischen Zahlen bestimmen, indem ich immer wenn die Meldung ausgegeben wird, dass dieunddie Zahl symmetrisch ist, dann die Variable anzahl_sym um 1 erhöht wird.
Falls anzahl_sym am Ende 0 ist, es also keine symmetrischen Zahlen zwischen zahl1 und zahl2 gibt, dann soll eine Meldung ausgegeben werden, dass es keine symmetrischen Zahlen in dem Bereich gibt.

Leider klappt das noch nicht so ganz.
(Nachdem beide Zahlen nochmal zur Kontrolle ausgegeben wurden, wird nun garnichts mehr ausgegeben).

Ich würde mich freuen, wenn jemand den Fehler findet! :)

Kleines Edit: Kann ich das mit dem anzahl_sym = printf(...); überhaupt so machen?
Oder wie kann man sonst die Anzahl der Ausgaben zählen? (bzw. wie könnte ich die Anzahl meiner symmetrischen Zahlen zählen?)

Hier ist mein Code:

#include <stdio.h>
/*#include <iostream.h>*/

//Funktionsdeklaration
int symmetrisch(unsigned int);
int anzahl_symBerechnenFall1(int,int);
int anzahl_symBerechnenFall2(int,int);

//Funktionsdefinition
/*Diese boolesche Funktion prueft, ob die aktuelle Zahl symmetrisch ist.
Falls ja, wird der Wert 1 zurueckgegeben,
falls nein wird der Wert 0 zurueckgegeben.
*/
int symmetrisch(unsigned int zahl)
{
     int vektor[5];
     int zaehler=0;
int i;
    
     do
     {
          vektor[zaehler] = zahl%10; // Mit Modulo wird die jeweils letzte Ziffer der Zahl herausgefunden
          zahl = zahl/10; // durch 10 teilen, um zur nächsten Stelle der Zahl überzugehen
          zaehler++;
     }
     while (zahl>0);
    
     for (i=0; i < zaehler/2; i++)
{
         if (vektor[i] != vektor[zaehler-1-i]) // Zahler - 1 nehmen, weil zahler++
{
            return 0; // nicht sym
}
}
return 1; // sym
}

//Anzahl der symmetrischen Zahlen bestimmen, falls zahl1 <= zahl2
int anzahl_symBerechnenFall1(int zahl1, int zahl2)
{
int anzahl_sym;

    while (zahl1 <= zahl2)
{
if (symmetrisch(zahl1))
{
//printf("Die Zahl %d ist [mm] symmetrisch.\n", [/mm] zahl1);
anzahl_sym = printf("Die Zahl %d ist [mm] symmetrisch.\n", [/mm] zahl1);
}
zahl1++;
anzahl_sym++;
}

return anzahl_sym;
}

//Anzahl der symmetrischen Zahlen bestimmen, falls zahl2 < zahl1
int anzahl_symBerechnenFall2(int zahl1, int zahl2)
{
int anzahl_sym;

while (zahl2 <= zahl1)
{
if (symmetrisch(zahl2))
{
//printf("Die Zahl %d ist [mm] symmetrisch.\n", [/mm] zahl2);
anzahl_sym = printf("Die Zahl %d ist [mm] symmetrisch.\n", [/mm] zahl2);
}
zahl2++;
anzahl_sym++;
}

return anzahl_sym;
}


//Main-Programm
int main(void)
{
    //Definition der lokalen Variablen
int zahl1;
int zahl2;
unsigned int zahl;
int anzahl_sym;

    //Eingabe von zwei positiven ganzen Zahlen
    
    //Eingabe von Zahl 1
printf("Geben Sie die erste Zahl ein: ");
scanf("%d", &zahl1);
while (zahl1<1)
{
          if (zahl1<1) //Eingabe von nichtpositiven Zahlen abfangen
      {
             printf("Ihre erste Zahl war nicht [mm] positiv.\n"); [/mm]
             printf("Geben Sie nochmals die erste Zahl ein: ");
             scanf("%d", &zahl1);
          }
          else
          {
          [mm] printf("\nIhre [/mm] Zahl: %d", zahl1);
          }
}
    [mm] printf("\nIhre [/mm] Zahl: %d", zahl1); //Ausgabe von Zahl 1 zur Kontrolle
    
    //Eingabe von Zahl 2
   [mm] printf("\n\nGeben [/mm] Sie die zweite Zahl ein: ");
scanf("%d", &zahl2);
while (zahl2<1)
{
      if (zahl2<1) //Eingabe von nichtpositiven Zahlen abfangen
          {
              printf("Ihre zweite Zahl war nicht [mm] positiv.\n"); [/mm]
              printf("Geben Sie nochmals die zweite Zahl ein: ");
              scanf("%d", &zahl2);
          }
          else
          {
          [mm] printf("\nIhre [/mm] Zahl: %d", zahl2);
          }
    }
    [mm] printf("\nIhre [/mm] Zahl: [mm] %d\n\n", [/mm] zahl2); //Ausgabe von Zahl 2 zur Kontrolle

    
    /*Pruefung der Zahlen im Bereich zwischen Zahl 1 und Zahl 2 auf Symmetrie
    und Ausgabe der betreffenden Zahlen
    */
    if (zahl1 <= zahl2)
    {
       anzahl_sym = anzahl_symBerechnenFall1;
  
   if (anzahl_sym = 0)
   {
   printf("Es gibt keine symmetrischen Zahlen zwischen %d und [mm] %d!\n", [/mm] zahl1, zahl2);
   }
  
   [mm] printf("\n\n\n"); [/mm]

    }

    else
    {
anzahl_sym = anzahl_symBerechnenFall2;

if (anzahl_sym = 0)
{
   printf("Es gibt keine symmetrischen Zahlen zwischen %d und [mm] %d!\n", [/mm] zahl1, zahl2);
}

[mm] printf("\n\n\n"); [/mm]

    }

    return 0;
}

Bezug
                
Bezug
Symmetrische Zahlen (C): Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:17 Sa 15.12.2012
Autor: Mija

Hat sich erledigt, war einfacher als ich erst dachte..

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de