C grafische ausgabe auf der konsole (array mit variabler größe)

Status
Für weitere Antworten geschlossen.

_tnt_

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
438
hallo,
ich habe folgende übungsaufgabe bekommen:



nr. 1 habe ich erledigt (code habe ich aber nicht hoch geladen - irrelevant), nr. 2 habe ich auch erledigt und nr. 3 ist fast fertig.

wie man sieht, habe ich jetzt ein array mit fixer größe angegeben. ich möchte es aber so machen, dass der größere koordinatenpunkt (z.B.: A(1|1) und B(8|5) in diesem Fall B) die größe des arrays angibt.

nur wie kann ich das machen? mit einer variable kann ich ja keine array-größe angeben?

Code:
#include<stdlib.h>
#include<stdio.h>

// ---<Define & Global>---
#define XACHSE 10 //größe vom array
#define YACHSE 10 //größe vom array
char koord[XACHSE][YACHSE]; // definiert das array für das rasta

// ---<Funktionsdeklaration>---
void rasta();
void vergleich();
void ausgabe();

// ---<Funktionsdeffinition>---
void rasta(int x1, int y1, int x2, int y2)
{
    int hoehe=0, breite=0, count1=0, count2=0;

    for(hoehe=0; hoehe<YACHSE; hoehe++)
        {
            for(breite=0; breite<XACHSE; breite++)
            {
                koord[hoehe][breite]='.';
            }
        }
}

void vergleich(int x1, int y1, int x2, int y2)
{
    int mx=0, my=0;

    if(abs (x1-x2) <= 1 && abs (y1-y2) <= 1)
    {
        // Bildschirm Ausgabe
        printf("Punkt A: %d, %d\n", x1, y1);
        printf("Punkt B: %d, %d\n", x2, y2);

        // Werte in das Array eintragen
        koord[x1-1][y1-1]='x';
        koord[x2-1][y2-1]='x'; //minus 1 damit es im erray auf der richtigen position ist
    }
    else
    {
        mx=(x2+x1)/2;
        my=(y2+y1)/2;

        vergleich(mx, my, x2, y2);
        vergleich(x1, y1, mx, my);
    }
}

void ausgabe(int x1, int y1, int x2, int y2)
{
    int hoehe=0, breite=0, count1=0, count2=0;

    for(hoehe=0; hoehe<YACHSE; hoehe++)
        {
            for(breite=0; breite<XACHSE; breite++)
            {
                printf("%c ", koord[hoehe][breite]);
            }
            printf("\n");
        }
}

// ---<Main>---
int main()
{
    int x1=0, y1=0, x2=0, y2=0;
   
    puts("Koordinaten Punkt A");
    scanf("%d %d", &x1, &y1);
    fflush(stdin);

    puts("\nKoordinaten Punkt B");
    scanf("%d %d", &x2, &y2);
    fflush(stdin);

    rasta(x1, y1, x2, y2);
    vergleich(x1, y1, x2, y2);
    ausgabe(x1, y1, x2, y2);
}

vielleicht kann mir ja jemand helfen.

vielen dank im voraus und noch nen schönen abend.
 
Code:
int anzahlElemente = 123;
int* meinArray = ( int* ) malloc( anzahlElemente * sizeof( int ) );
assert( meinArray );
meinArray[ 0 ] = 23;
meinArray[ 1 ] = 34343;
// ....
Ergänzung ()

Sorry, Post nicht richtig durchgelesen. Sehe gerade, daß du mit einem 2-dimensionalem Array hantierst. Also:

Code:
int dimension1 = 8;
int dimension2 = 5;

char** koord = ( char** ) malloc( sizeof( char* ) * dimension1 );

for ( int i = 0; i < dimension1; ++i )
{
    koord[ i ] = ( char* ) malloc( sizeof( char ) * dimension2 );
}


P.S. Wenn du fertig bist, das Array mit free() wieder löschen.

Code:
for ( int i = 0; i < dimension1; ++i )
{
    free( koord[ i ] );
}

free( koord );

P.S. #2

Da du in C arbeitest (und nicht etwa in C++), solltest du lieber void rasta(void) schreiben. Das bedeutet, Funktion rasta akzeptiert KEINE Argumente. void rasta() hingegen bedeutet, Funktion rasta akzeptiert eine beliebige Anzahl Argumente.
 
Zuletzt bearbeitet:
In meinen Augen sollte das eine Verwarnung für den Thread steller geben.

Davon abgesehen bestraft er sich eh nur selbst damit, Programmieren lernst nur durch Übung
und alogrithmisches denken nur durch den eigenen "ahhh" Effekt.
Das Beispiel ist ja bei gott ned so schwer, vorallem da dabei sogar ja noch eine Erklärung ist.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben