Autor Beitrag
ridderle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 12.04.08 15:10 
Guten Abend,
ich soll eine Zahl einlesen und damit
1) die Teiler feststellen
2) abfragen, ob es sich um eine vollkommende Zahl handelt
Eine vollkommende Zahl ist dann vollkommen, wenn sie gleich der Summe ihrer eigenen echten Teiler ist

BSP: 6 ist eine vollkommende Zahl
Also 6 hat ja die Teiler 1,2,3 = 6

Nun habe ich ein einziges Problem:
ich darf ja nicht die Zahl selber durch sich teilen, obwohl das auch ein Teiler ist, aber diesen Teiler soll ich außenvor lassen.
Mein Programm läuft nun auch, aber eine Stelle ist mir noch unklar: no = no+1 in der Abfrage, ob die Zahl teilbar ist!
Muss ich normal nicht: den Array - 1 abziehen?
Ich verstehe nicht, warum der Array erhöht wird.


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
using System;
using System.Collections.Generic;
using System.Text;

namespace HA003
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("#####VOLLKOMMENDE ZAHLEN#####");
            Console.WriteLine();
            Console.WriteLine("Defintion: Eine Zahl heißt vollkommen:");
            Console.WriteLine("wenn sie gleich der Summe ihrer eigenen echten Teiler ist");
            Console.WriteLine();
            Console.WriteLine("Geben Sie eine Grenze ein, bis wohin Sie vollkommende Zahlen auslesen möchten");
            // Einlesen einer Zahl
            int grenze_zahl = Convert.ToInt32(Console.ReadLine());
           
            // Deklaration der Variablen und Felder
            int[] teiler = new int[grenze_zahl];
            int zahl_teilbar = 1;
            int summe = 0;

            Console.WriteLine("Folgende Zahlen sind teilbar durch " + grenze_zahl + ":");
           
            // Berechnung der Teiler
            // Schleifendurchlauf bis die eingegebene Zahl
            for (int no = 0; no < grenze_zahl; ++no)
            {

                // Überprüfung, ob die eingegebene Zahl teilbar ist!
                if (grenze_zahl % zahl_teilbar == 0)
                {
                    no = no + 1;
                    teiler[no] = zahl_teilbar;          // Speichern der teilbaren Zahl in ein Array
                    Console.Write(teiler[no] + " ");    // Ausgabe der Teiler

                    summe = teiler[no] + summe;         // Berechnung der Summe aller Teiler
                }

                zahl_teilbar++;              // erhöhe den Teiler immer um 1
            }

            Console.WriteLine();
            // Überprüfung, ob die Summe aller Teiler die selbe Zahl ist, wie Ihre eingegebene
            if (summe == grenze_zahl)
            {
                Console.WriteLine(grenze_zahl + " " + "ist EINE vollkommende Zahl");   // Ausgabe
            }

            else if (summe != grenze_zahl)
            {
                Console.WriteLine(grenze_zahl + " " + "ist KEINE vollkommende Zahl");
            }
            //Console.WriteLine("Die Summe ist: " + summe);

            Console.ReadKey();              // Bewirtk, dass das Konsolenfenster nicht gleich geschlossen wird

        }
    }
}
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 12.04.08 17:09 
Von vollkommenden Zahlen habe ich noch nie etwas gehört *g* . Auch dein Algorithmus ist etwas konfus: Warum erhöhst du no an zwei verschiedenen Stellen, lässt no sich nicht sowieso durch zahl_teilbar ersetzen und wozu benötigst du überhaupt teiler? Ich würde das einfach so machen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
for (int divisor = 1; divisor < grenze_zahl; divisor++)
  if (ganze_zahl % divisor == 0) {
    Console.WriteLine("Juhu: {0}", divisor);
    sum += divisor;
  }