C Programmierung Aufgaben

Diskutiere C Programmierung Aufgaben im Programmierung Forum im Bereich Software Forum; Hallo Community, ich brauch mal wieder etas Hilfe. Ich steig dir den Array in C nicht durch. Wir sollen in der Berufsschule ein magisches Quadrat...
M

Martin

Threadstarter
Mitglied seit
02.12.2008
Beiträge
493
Standort
nähe Wittenburg
Hallo Community,

ich brauch mal wieder etas Hilfe. Ich steig dir den Array in C nicht durch. Wir sollen in der Berufsschule ein magisches Quadrat programmieren.

Eine quadratische Anordnung von n Zahlen heißt magisches Quadrat.der Ordnung n, wenn das Quadrat die Zahlen 1 bis n * n so enthält, dass die Summe aller Zeilen, aller Spalten und der beiden Diagonalen jeweils denselben Wert - die magische Zahl - hat. Die Ordnung des foldendes Quadrates ist 5, die magische Zahl 65.
So relativ weit kam ich mit meinem Code nicht (Konsolenanwendung)

Code:
#include <stdio.h>

main()
{
    int nQuadrat[5][5] = {0} // Reservierung 5 * 5 Elemente - Vorbelegung 0
    int x,y,z,i,j
    int nQuadrat = 0;

}
Ich habe jetzt nur keine Ahnung, wie der Code beginnen soll.
Hat jemand ein kleinen Ansatz für mich?

Gruß Martin
 
P

Prometheus

Gast
Hallo Community,

ich brauch mal wieder etas Hilfe. Ich steig dir den Array in C nicht durch. Wir sollen in der Berufsschule ein magisches Quadrat programmieren.



So relativ weit kam ich mit meinem Code nicht (Konsolenanwendung)

Code:
#include <stdio.h>

main()
{
    int nQuadrat[5][5] = {0} // Reservierung 5 * 5 Elemente - Vorbelegung 0
    int x,y,z,i,j
    int nQuadrat = 0;

}
Ich habe jetzt nur keine Ahnung, wie der Code beginnen soll.
Hat jemand ein kleinen Ansatz für mich?

Gruß Martin
Das magische Quadrat hat Ähnlichkeiten mit Sudoku oder enfernt mit dem "Latin Hypercube Sampling", wenn dir das was hilft. Wie man das programmiert, kann ich dir allerdings nicht sagen. Aber diese Funktion (magisches Quadrat erzeugen) gibt es in Matlab und kommt ganz weit vorne im Tutorial vor. Einfach mal da nachschauen.
 
M

Martin

Threadstarter
Mitglied seit
02.12.2008
Beiträge
493
Standort
nähe Wittenburg
Über Matlab kenn ich das :) Nur unser Programmierer verlangt, dass in C zu schreiben. :) Wollen wir mal schauen :)

Leider find alles nur in C++ oder Java
 
P

Prometheus

Gast
Über Matlab kenn ich das :) Nur unser Programmierer verlangt, dass in C zu schreiben. :) Wollen wir mal schauen :)

Leider find alles nur in C++ oder Java
Hast du geschaut, ob du diese Funktion in Matlab "öffnen" kannst. Da müsste der Code doch drinstehen. Dann einfach transferieren. Besser ist es natürlich, wenn du selber drauf kommst, wie es geht. Ich bin mir sicher, mit einigem Nachdenken kriegt man das hin.
 
M

Martin

Threadstarter
Mitglied seit
02.12.2008
Beiträge
493
Standort
nähe Wittenburg
Hast du geschaut, ob du diese Funktion in Matlab "öffnen" kannst. Da müsste der Code doch drinstehen. Dann einfach transferieren. Besser ist es natürlich, wenn du selber drauf kommst, wie es geht. Ich bin mir sicher, mit einigem Nachdenken kriegt man das hin.
Die Überlegung ist im Kopf vorhanden, nur an der Umsetzung scheitert es. Bekomm teils den Syntax nicht n den Kopf... und vorallem wenn es denn mit for Schleifen los geht.
 
A

AlienJoker

Gast
Dann beschreibe mal deine Idee... Deine hausaufgaben musst du im Endeffekt selbst machen. Wir geben dir da nur denkanstöße (hoffentlich).
 
M

Martin

Threadstarter
Mitglied seit
02.12.2008
Beiträge
493
Standort
nähe Wittenburg
Also ich hab mal ein Bild angefügt. So soll es im Endeffekt ausgegeben werden.
Die 1 ist laut Aufgabe vorgegeben. Die lass ich im Vorfeld schon eintragen. Bei den Kantenlängen dürfen nur ungrade Zahlen verwendet werden!

Code:
nQuadt[x][y] = {1};
Die Vorgehensweise wäre folgendermaßen:

Um die 2 in das Feld zubekommen, geh ich von der 1, ein Feld nach Rechts und ein 1 nach oben. Oben raus, geh ich außerhalb der Matrix und komme gedanklich unten wieder rein (rechts in die nächste Spalte).


Mit der 3 ist es ebenso. Wenn ich jetzt z.B. bei der 16 bin, geh ich ein nach Rechts und ein nach oben und komme in die Spalte 1 Zeile 1.

Ist das verständlich? Also muss ich ja mit for Schleifen arbeiten, die immer weiter durchlaufen, bis alle Felder gefüllt sind.
 

Anhänge

Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
Um die 2 in das Feld zubekommen, geh ich von der 1, ein Feld nach Rechts und ein 1 nach oben. Oben raus, geh ich außerhalb der Matrix und komme gedanklich unten wieder rein (rechts in die nächste Spalte).
Nicht ganz. Wenn du von der 1 (Position 1|3) ein Feld nach rechts gehst und dann einen nach oben gehst, kommst du unten wieder in Spalte 4 herein und gehst nicht noch eine Spalte nach rechts. Die 2 gehört dann an Position 5|4.

Also muss ich ja mit for Schleifen arbeiten, die immer weiter durchlaufen, bis alle Felder gefüllt sind.
Du brauchst genau eine For-Schleife mit 24 Durchgängen.

Mfg Zille
 
M

Martin

Threadstarter
Mitglied seit
02.12.2008
Beiträge
493
Standort
nähe Wittenburg
Hallo,

bisher bin ich soweit zukommen, um den Fortschritt zu sehen :)

Gruß Martin

Code:
#include <stdio.h>

int main()
{
        //Speicherreservierurng
        int nMagQuad[19][19] = {0};
        int nMagZahl  = 0, nZeile , nSpalte, i;
        int nOrdnung;

        // Eingabe
        nOrdnung = 5;

        //Verarbeitung
        nZeile = 0;
        nSpalte = (nOrdnung - 1)/2;                                             // nOrdnung 5 - 1 = 4 / 2 = 2 (Mitte des Quadrats)

        i=1;
        nMagQuad[nZeile][nSpalte] = i;                                          // i in nMagQuad eintragen

        //Füllen der nächsten Zellen im Mag. Quadrat
        for(i=2; i<=nOrdnung*nOrdnung; i++)
        {
                nZeile--;
//                nZeile=-1;
                nSpalte++;
//                nSpalte=5;

                if(nZeile<0 && nSpalte == nOrdnung)
                {
                        nZeile += 2;
                        nSpalte--;
                }
                else if (nZeile < 0)
                        {
                                nZeile = nOrdnung-1;
                        }
                        if(nSpalte == nOrdnung)
                        {
                                nSpalte = 0;
                        }
                        if(nMagQuad[nZeile][nSpalte] == 0)
                        {
                        }
                        else
                        {
                                nZeile += 2;
                                nSpalte--; 
                        }

        }

        getchar();

        return 0;
}
 
Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
Nimm mal das hier als Denkanstoss:

Schleife 2 bis n*n Schrittweite 1

Jetzt prüfen ob die Zahl vorher ein Vielfaches von n ist
Also ob Modulo von i-1 geteilt durch n gleich Null ist

Wenn Ja:
Zeile um eins erhöhen
Wenn Nein:
Zeile um eins verringern
und Spalte um eins erhöhen

Jetzt prüfen ob man außerhalb des Quadrates ist

Wenn Zeile gleich n dann Zeile gleich Null
Wenn Spalte gleich n dann Spalte gleich Null

Jetzt die Zahl i in das Quadrat schreiben

Ende der Schleife

Mfg Zille
 
Thema:

C Programmierung Aufgaben

Sucheingaben

magisches quadrat programmieren modulo

C Programmierung Aufgaben - Ähnliche Themen

  • Programmierung

    Programmierung: var bufferp:array[0..511] of byte; . . . c:='\\.\PhysicalDrive1'+chr(0)...
  • Ich finde meinen Fehler

    Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
  • Programmierung

    Programmierung: Ich programiere unter VS2010(C#). Seit Tagen versuche ich aus einer alten IB-Datenbank Blob-Felder auszulesen. Das ist aber nicht das Thema, da...
  • Batch Programmierung

    Batch Programmierung: Guten Nabend miteinander. Also ich darf für meinen Chef ein kleines Programm schreiben welches Die Namen aus einer Textdatei ausliest und danach...
  • VBA-Programmierung Excel 2013 / Office 365 (Excel 2013)

    VBA-Programmierung Excel 2013 / Office 365 (Excel 2013): Hallo, ich habe unter Excel 2013 eine Anwendung in Verbindung mit dem SQL-Server 2012 entwickelt, der Zugriff läuft unter ADO. Diese...
  • Ähnliche Themen

    • Programmierung

      Programmierung: var bufferp:array[0..511] of byte; . . . c:='\\.\PhysicalDrive1'+chr(0)...
    • Ich finde meinen Fehler

      Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
    • Programmierung

      Programmierung: Ich programiere unter VS2010(C#). Seit Tagen versuche ich aus einer alten IB-Datenbank Blob-Felder auszulesen. Das ist aber nicht das Thema, da...
    • Batch Programmierung

      Batch Programmierung: Guten Nabend miteinander. Also ich darf für meinen Chef ein kleines Programm schreiben welches Die Namen aus einer Textdatei ausliest und danach...
    • VBA-Programmierung Excel 2013 / Office 365 (Excel 2013)

      VBA-Programmierung Excel 2013 / Office 365 (Excel 2013): Hallo, ich habe unter Excel 2013 eine Anwendung in Verbindung mit dem SQL-Server 2012 entwickelt, der Zugriff läuft unter ADO. Diese...
    Oben