Forum: PC-Programmierung Mehrdimensionale Matrix erstellen


von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Müsste ich hier zwei Schleifen erstellen?
for (i = 0; i< 6; i++);
for (j = 0; j<6; j++);

Könnte bitte jemand eine Lösungsvariante mir zeigen

matrix [6][5] = {0};

: Verschoben durch Admin
von STM32 User (Gast)


Lesenswert?

Puhh die Aufgabe ist so trivial, wenn du dafür SELBER keine Lösung 
findest, kannst du die Prüfung gleich abmelden. Die anderen Aufgaben 
können kaum leichter sein.

von Irgendeiner (Gast)


Lesenswert?

STM32 User schrieb im Beitrag #7130591:
> Puhh die Aufgabe ist so trivial, wenn du dafür SELBER keine Lösung
> findest, kannst du die Prüfung gleich abmelden.

Nicht nur die Prüfung. Auch die Abendschule/Weiterbildung oder was auch 
immer das sein soll.

So ein Kurs startet ja nicht mit einer Prüfung, sondert endet nach 
X-Zeit mit einer Prüfung. Von Start der Veranstaltung bis zum Start der 
Prüfung wurde sicherlich einiges zu diesem Themengebiet durchgekaut. 
Wenn es dann an solchen Basics scheitert, dann wird's mit dem Rest auch 
nichts mehr.

Die Wirtschaft benötigt auch Hilfskräfte für einfache Tätigkeiten, wenn 
auch immer weniger. Spargel müssen z.B. immer noch von Hand geerntet 
werden. Auch die Post hat Personalmangel.

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Könnte mir bitte jemand eine Lösungsalternative zu senden?

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Könnte mir bitte jemand eine Lösungsalternative zu senden?

Danke für die Hilfe

von EAF (Gast)


Lesenswert?

Nathan G. schrieb:
> Könnte mir bitte jemand eine Lösungsalternative zu senden?

Ja

von Kevin M. (arduinolover)


Angehängte Dateien:

Lesenswert?

Nathan G. schrieb:
> Könnte bitte jemand eine Lösungsvariante mir zeigen

Welch komplexe Aufgabenstellung. Hoffen wir mal das die Prüfung nicht 
schon morgen ist, sonst wird das nix.

Eine von vielen Lösungsmöglichkeiten, was auch immer die 
Aufgabenstellung mit "muss durch eine Formel berechnet werden" meint. Um 
mir da weiter gedanken zu machen ist es eindeutig zu spät.

Kommentare lass ich mal weg, Code ist Doku und so 👍
1
#include "stdio.h"
2
3
#define dim 15
4
char matrix [dim][dim];
5
6
void initMatrix(){
7
        for (int i = 0; i < dim; i++){
8
                for(int j = 0; j < dim; j++){
9
                        matrix[i][j]='.';
10
                }
11
        }
12
}
13
14
void setMatrix(char sym){
15
        int i = dim;
16
        while(i--){
17
                matrix[i][i]=sym;
18
                matrix[dim-1-i][i]=sym;
19
        }
20
}
21
22
void printMatrix(){
23
        for (int i = 0; i < dim; i++){
24
                for(int j = 0; j < dim; j++){
25
                        printf("%c",matrix[i][j]);
26
                }
27
                printf("\n");
28
        }
29
}
30
31
int main(void){
32
33
        initMatrix();
34
        setMatrix('O');
35
        printMatrix();
36
37
        return 0;
38
39
}

von Xeraniad X. (xeraniad)


Lesenswert?

Ja, da kam mir Kevin M. verdankenswerterweise zuvor; mein 
Lösungsvorschlag war weit weniger diszipliniert strukturiert.
Unter prophylaktischer Vorwegnahme des zu erwartenden, vernichtenden 
Schlundes wie hier üblich erfahrungsgemäss destruktiver Kritik
folgt der etwas kommentierte Ansatz.
1
/* Welche Sprache denn.  */ 
2
3
  #include <stdio.h>
4
5
  /* g++ -g ng.cpp -o ng ; ./ng   ; rm ng # */    /* <-- Dies war zwecks 
6
               Reproduzierbarkeit notiert worden, um zu verifizieren, 
7
               ob denn das "Programm" auch funktioniert. */
8
9
  #define NUM_ROWS  15               /* Verwendung von "macros" ist 
10
                                        nebenbei bemerkt ausserst uebel; 
11
                                        besser ist der Einsaz anderer 
12
                                        Hochsprachen, wie z. B. 
13
                                        Java oder so. */
14
  #define NUM_COLS  NUM_ROWS         /* Falls noch nicht erwaehnt: 
15
                                        nicht guter style. */
16
17
 
18
  int main (int argc, char const * argv [])   /* mit nichtsnutzigen 
19
                                                 Kommentaren */
20
  { int            ern = 0;
21
22
    char arr [NUM_ROWS] [NUM_COLS];   /* Dies ist die Deklaration 
23
                                         des geforderten Quadrates 
24
                                         fuer die Zeichen 
25
                                        (; noch uninitialisiert). */
26
27
    /* Hier zunaechst eine "2 fach for loop"  
28
       welche das zuvor deklarierte Quadrat wie erwuenscht belegen soll. */
29
    for (int row = 0; NUM_ROWS > row; ++ row) {
30
      int col_r = NUM_COLS;   /* Index zu Spalte rechts */
31
      for (int col_l = 0; NUM_COLS > col_l; ++ col_l) {
32
         -- col_r;
33
                            /* Die "Formel", worauf in Anmerkung #6 
34
                               hingewiesen wurde. 
35
                               Es wird ja eine "Formel" verlangt. */
36
         arr [row][col_l] =      (row == col_l)  || (row == col_r) 
37
                              ? 'O' 
38
                              : '.';  
39
                   /* Hier oben der beruechtigte "ternary operator" 
40
                      in C language. 
41
                      Sehr Uebel!
42
                      Davon sei insdringlich abzuraten, 
43
                      liest man gerne von Puristen 
44
                     (weiss auch nicht weshalb). */
45
      }  /* col_l */
46
    }  /* row */
47
   
48
    /* Hernach folgt eine weitere verschachtelte Iteration, 
49
       welche die zuvor fleissig erarbeiteten Zeichen 
50
       zwecks Belustigung des Publikums ausgeben sollte. */ 
51
    for (int row = 0; NUM_ROWS > row; ++ row) {
52
      for (int col = 0; NUM_COLS > col; ++ col) {
53
        /* Gib das Zeichen aus! */
54
        (void) fprintf (stdout, "%c", arr [row][col]);   
55
      }  /* col */
56
      /* ... und schreibe auch noch ein Zeilen -Ende dazu hin! */
57
      (void) fprintf (stdout, "\n");  
58
    }  /* row */
59
    
60
 /* (void) fprintf (stdout, "-\n"); */
61
62
    return ern;
63
  }  /* main */
... und es läuft
Welche Gründe gibt es, jemanden ins Lächerliche ziehen zu wollen, wer 
sich für "Iteration" interessiert {, oder möglicherweise danach auch für 
"Rekursion"}?
& ich werde an Folge -Diskussionen nicht teilnehmen
& ich sollte mich nicht darüber lustig machen, wenn jemand versucht, 
sich solche Konzepte anzueignen.

: Bearbeitet durch User
von Cartman (Gast)


Lesenswert?

> ich sollte mich nicht darüber lustig machen

Allein schon der Gebrauch des Verbs "erstellen" im Zusammenhang
mit einer Matrix ist spachlicher Unfug.
Wenn der Inhalt dieser Matrix ein System beschreibt, muss eben
nichts "erstellen".

BWLer erstellen (nicht funktionierende) Plaene...

von Nathan G. (Firma: Student) (nathan_1234)



Lesenswert?

Guten Tag könnten mir bitte jemand bei der Aufgabe, helfen wie man 
hierbei den minimalen Wert berechnent.

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Guten Tag,

könnte mir bitte jemand eine Lösungsalternative senden?
Müsste ich bereits in dem For-Loop, eine Funktion anwenden?

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Guten Tag,

wäre jemand bereits seinen Lösungsweg mit mir zu teilen?

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Guten Tag müsste ich hierbei,

drei Pointer erstellen?

von Markdown (Gast)


Lesenswert?

Nathan G. schrieb:
> Mehrdimensionale Matrix

das ist keine mehrdimensionale Matrix. Das ist einfach eine Matrix.

von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Wie genau würde ich eine mask erstellen?

von Nathan G. (Firma: Student) (nathan_1234)


Lesenswert?

Markdown schrieb:
> Nathan G. schrieb:
>> Mehrdimensionale Matrix
>
> das ist keine mehrdimensionale Matrix. Das ist einfach eine Matrix.

Hi könntest du mir einen Lösungsvorschlag zu senden?

von Percy N. (vox_bovi)


Lesenswert?

Nathan G. schrieb:
> Guten Tag,
> wäre jemand bereits seinen Lösungsweg mit mir zu teilen?

Ich habe mangels Veranlassung keinen Lösungsweg.

Nathan G. schrieb:
> Wie genau würde ich eine mask erstellen?

Das kommt auf Deine Sorgfalt an.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nathan G. schrieb:
> Guten Tag könnten mir bitte jemand bei der Aufgabe, helfen
Nathan, weil das hier nicht "Frag Mutti" auch auch nicht die "kostenlose 
Prüfungshilfe" ist, machen wir das jetzt so: du fängst mit der 
jeweiligen Aufgabe an und wenn du dann konkrete Probleme hat, dann 
fragst du, was du denn besser oder anders machen könntest.

Das Thema ist alt, es wurde schon Generationen von Internetnutzern vor 
dir diskutiert. z.B. dort im 
Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"

Summa summarum: wenn dir diese Kinderkram-Aufgaben zu kompliziert sind, 
dann könnte es sein, dass du im nächsten Semester besser was etwas 
machst, das sich mit deinen Fähigkeiten besser überdeckt. Denn das wird 
in der Zukunft nicht einfacher.

BTW: Screenshots bitte als PNG, nicht als JPEG-Pixelbrei!

von Nathan G. (Firma: Student) (nathan_1234)



Lesenswert?

Guten Tag,

wenn ich die int matrix_31[10][10] hochzählen möchte,

int matrix_31[10][10]={0};

Müsste ich hierbei mehrere For Loops erstellen, denn besser gesagt darf 
ich keine Wert vorher definieren?
i=Zeile;
j=Spalte;
1
for i=0;i<3;i++ 
2
printf("%d/n",i);
3
4
for j=0;j<5;j++
5
printf("%d/n",j);

oder lieber so

Beispiel Matrix-Transposition:
1
#define N 10
2
float matrix[N][N];
3
float t; 
4
int zeile, spalte;
5
// Eingabe Matrix
6
// …
7
for(zeile=0; zeile<N; zeile++)
8
{ for(spalte=zeile+1;spalte<N; spalte++)
9
{ // Tausch matrix[zeile][spalte] mit matrix[zeile_neu][spalte_neu]
10
// wobei zeile_neu = spalte und spalte_neu = zeile
11
t = matrix[zeile][spalte];
12
matrix[zeile][spalte] = matrix[spalte][zeile];
13
matrix[spalte][zeile] = t; 
14
}
15
}

: Bearbeitet durch Moderator
von Nathan G. (Firma: Student) (nathan_1234)


Angehängte Dateien:

Lesenswert?

Guten Tag,

wenn ich eine Matrix erstelle und die zwei


for i=0; i<9; i++;

Müsste ich hierbei noch eine Funktion definieren?
for i=0; i<9; i++

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Nathan G. schrieb:
> oder lieber so
Verwende bitte die [c]-Tags wie in der Anleitung über jeder 
Texteingabebox beschrieben.

von Forennutzer (Gast)


Lesenswert?

Wow
und das von einen Moderator....

Ja "dank" der dauernden Wiederholung der Frage ist von einen Troll 
auszugehen.

Aber:
Ein Forum funktioniert anders - es lesen auch viele nur mit oder werden 
durch Suchmaschinen zu Foren und ähnliche Dienste (ja Dienste zwar 
unentgeltlich und auf beiden Seiten freiwillig, niemand muss Antworten 
wenn er den TO nicht mag bzw. dessen Einstellung missfällt) geleitet.
Insbesondere im deutschsprachigen Raum in diesen Themengebiet oft halt 
zu diesen Forum hier.
Das sollte an erster Stelle ein Moderator wissen...

Und so außergewöhnlich ist die Frage dann auch nicht, es gibt sicherlich 
viele Leute die mit sehr ähnlichen Aufgaben ihre Probleme haben, bzw. wo 
Autodidakten gerne auch noch mal eine dritte und vierte Erklärung mit 
einen echten Beispiel (Code) gebrauchen können.

Die nicht "technischen" Hintergründe der Frage sind total uninteressant 
und gehen keinen was an.

Da hat der Troll (hat sich durch dauernde Wiederholung eines Fragenteils 
vertraten - oder geschah das sogar Vorsätzlich um einen auf Till 
Eulenspiegel zu machen? - Dann mein Daumen hoch -gut gemacht denn genau 
so haben die kleinkarierten Bürger in den Eulenspiegelerzählungen auch 
reagiert - und die Erzählungen sind ja nicht von Himmel gefallen sondern 
basieren immer auf die Realität) aber genau erkannt wie viele hier im 
Forum ticken und das man sie immer mit den gleichen Tricks triggern kann 
- sogar einen Moderator-das war es für ihn also sehr einfach.


Ist es denn so schwer einfach auf Fragen von "Schülern" aber auch 
"Fahrzeug Tunern" "E-Installationslaien" usw. einfach nur den Inhalt 
betreffend zu Antworten?
Wie der "Schüler", Tuner, E-Intallationslaie diese Antworten dann nutzt 
und sich über kurz oder Lang vielleicht in die Sackgasse manövriert oder 
Ärger einhandelt ist doch ganz alleine seine Sache...

von Mutti (Gast)


Lesenswert?

Ich finde, der Moderator hat richtig reagiert. Es ist doch ein 
Unterschied, ob ein Laie hier bei einer Reparatur Hilfe benötigt, oder 
ob ein Schüler/Student sich durch eine Prüfung mogeln will.

von heinz (Gast)


Lesenswert?

Mutti schrieb:
> ein Schüler/Student sich durch eine Prüfung mogeln will

Ja, sieht wirklich so aus. Am Anfang die Übungsaufgaben vom 10.2. und 
dann die Screenshots von heute.

Da kann man echt nicht mehr helfen, wenn so wenig Grundlagen vorhanden 
sind.

von Mario M. (thelonging)


Lesenswert?

Nathan G. schrieb:
> Matrix_zeilenweise_und_spaltenweise_hochzaehlen.jpg

Na toll, nach Pixelbrei jetzt Londoner Nebel. IT-ler mit Medienbruch, so 
wird das nichts.

von EAF (Gast)


Lesenswert?

Forennutzer schrieb:
> .....

Viele Worte....
Aber kein einziges dazu, wie der TO sein Problem lösen kann.
Du wirst also deinen eigenen Ansprüchen nicht gerecht.

Aber so sind sie halt, hier, die Großspurigen.

von Strafgefangener (Gast)


Lesenswert?

Sofort in den Knast!

von Bad U. (bad_urban)


Lesenswert?

heinz schrieb:
> Ja, sieht wirklich so aus. Am Anfang die Übungsaufgaben vom 10.2. und
> dann die Screenshots von heute.

Die waren vom letzten Jahr.
Ich denke selbst heute dürfte es nicht erlaubt sein während einer 
Prüfung im Internet zu surfen.

von Dirk B. (dirkb2)


Lesenswert?

Xeraniad X. schrieb:
> char arr [NUM_ROWS] [NUM_COLS];   /* Dies ist die Deklaration
>                                          des geforderten Quadrates
>                                          fuer die Zeichen
>                                         (; noch uninitialisiert). */

Das ist sogar die Definition (mit impliziter Deklaration)

Mit einem extern davor wäre es nur die Deklaration.

von Nathan G. (Firma: Student) (nathan_1234)


Lesenswert?

Nathan G. schrieb:
> Guten Tag,
>
> wenn ich eine Matrix erstelle und die zwei
>
>
> for i=0; i<9; i++;
>
> Müsste ich hierbei noch eine Funktion definieren?
> for i=0; i<9; i++

Hätte dazu jemand einen Lösungsvorschlag?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Forennutzer schrieb:
> Wow und das von einen Moderator....
Das hat mit "Moderator" nichts zu tun. Es ist die schlichte und einfache 
Wahrheit. Oder dürfen Moderatoren nur weichgespülte und gleichgetaktete 
Meinungen haben? Muss ich evtl. sogar korrekt gendern, damit ich keinem 
auf den Schlips oder die langen Fingernägel trete?

> Aber: Ein Forum funktioniert anders
Es funktioniert genau dann am Besten, wenn es zwischen dem TO und den 
anderen Teilnehmern eine Interaktion gibt und man gmeinsam auf 
Fortschritte aus ist. Die, die da zu helfen gewillt sind, lernen ja auch 
etwas dabei.

> Ist es denn so schwer einfach auf Fragen von "Schülern" aber auch
> "Fahrzeug Tunern" "E-Installationslaien" usw. einfach nur den Inhalt
> betreffend zu Antworten?
Schüler sind grundsätzlich unterschiedlich zu den anderen beiden 
Personengruppen. Denn die sollten ja was dabei lernen. Und dann bringt 
es halt schon mal überhaupt nichts, wenn man da einfach eine fertige 
Lösung postet. Denn die kapiert der Schüler ja mangels elementarster 
Grundlagen auch nicht.

> Das sollte an erster Stelle ein Moderator wissen...
Mir reicht, was ich weiß.

Nathan G. schrieb:
> Nathan G. schrieb:
>> Müsste ich hierbei noch eine Funktion definieren?
> Hätte dazu jemand einen Lösungsvorschlag?
Das geht ganz einfach auch ohne jegliche Funktion im Hauptprogramm. Als 
Denkanstoß die erste Teilaufgabe siehe dort (und im Anhang): 
https://onlinegdb.com/riWXeStud

: Bearbeitet durch Moderator
von Grossspurbreite XXL (Gast)


Lesenswert?

Mario M. schrieb:
> Nathan G. schrieb:
>> Matrix_zeilenweise_und_spaltenweise_hochzaehlen.jpg
>
> Na toll, nach Pixelbrei jetzt Londoner Nebel. IT-ler mit Medienbruch, so
> wird das nichts.

Wenn denn ein Bild (egal ob xx kB PNG oder xxx kB JPEG) auch mehr 
hergeben würde, bei einem AufgabenTEXT von <x kB.

Das übungsprogrämmchen selbst produziert ebenfalls nur TEXT, keine 
Grafik...

von Grossspurbreite XXL (Gast)


Lesenswert?

Nathan G. schrieb:
> Nathan G. schrieb:
>> Müsste ich hierbei noch eine Funktion definieren?
>> for i=0; i<9; i++
>
> Hätte dazu jemand einen Lösungsvorschlag?

Muss nicht, aber kann: WENN der Einsatz von Funktionen einem Zweck 
dient.

Erstens: Nennst Du diesen Zweck/Absicht, kennst Du die Antwort selbst.

Zweitens: Entwirf dann mal eine Funktion und zeige sie uns.

Drittens: danach bekommst Unterstützung darin, die Funktion auch zum 
funktionieren zu bringen; resp. Manöverkritik diese dann zu verbessern 
den Zweck/Absicht zu erreichen/erfüllen.

von EAF (Gast)


Lesenswert?

Ein eigentlich triviales Dingen, etwas ausgeschmückt.
1
constexpr size_t ausmaß {71}; // Anzahl Zeilen/Spalten
2
3
template<size_t ausmaß>struct Zeile{unsigned y;bool operator [](unsigned x){return y==x||ausmaß-y-1==x;}};
4
template<size_t ausmaß>struct Matrix{Zeile<ausmaß>  operator [](unsigned y){return Zeile<ausmaß>{y};   }};
5
Matrix<ausmaß> matrix;
6
7
void setup() 
8
{
9
  Serial.begin(9600);
10
11
  for(unsigned y = 0; y <ausmaß; y++)
12
  {
13
    for(unsigned x = 0; x <ausmaß; x++) Serial.print(matrix[y][x]?'O':'.');
14
    Serial.println();
15
  }
16
  Serial.println();
17
}
18
19
void loop(){}

von Grossspurbreite XXL (Gast)


Lesenswert?

Nathan G. schrieb:
> Müsste ich hier zwei Schleifen erstellen?
> for (i = 0; i< 6; i++);
> for (j = 0; j<6; j++);

Nichtmal zwingend: eine Schlaufe "bis zur Hälfte" genügt auch denn das 
geforderte "Kreuzmuster" ist sowohl horizontal wie vertikal symmetrisch.
1
for (int k=0; k<(6/2); k++) {
2
   int x, y;
3
4
   /* 1. Quadrant */
5
   x = ... +k;
6
   y = ... +k;
7
   mx[x][y] = 'O';
8
9
    /* 2. Quadrant */
10
    x = ... +k;
11
    y = ... -k;
12
    mx[x][y] = 'O';
13
14
    /* 3. Quadrant */
15
    x = ...
16
    :
17
18
    /* 4. Quadrant */
19
     :
20
21
}

Voraussetzung ist natürlich die Befüllung der gesamten Matrix mit dem 
"Hintergrundzeichen" '.' z.B. mittels memset(); - die Schlaufe "bis zur 
Hälfte" entspr. nur zum setzen des "Vordergrundzeichens" 'O'.

Quadrantenbezeichnung und Sonderfallbetrachtung bei Ungeraden 
Matrixgrösse überlassen wir den Programmierstudenten und den ewigen 
Elfenbeiturmbewohnern.

von EAF (Gast)


Lesenswert?

Grossspurbreite XXL schrieb:
> mx[x][y] = 'O';

Laut Aufgabenstellung: Unzulässig!

von Profi-Programmierer (Gast)


Lesenswert?

EAF schrieb:
> Laut Aufgabenstellung: Unzulässig!

Hmm, würde diese Lösung akzeptiert werden?
1
#include <stdio.h>
2
#include <string.h>
3
4
int main()
5
{
6
  char matrix[240];
7
  memset(matrix, 46, 239);
8
  for (char *p1 = matrix, *p2 = p1 + 14; p1 < matrix + 240; p1 += 17, p2 += 15)
9
    *p1 = *p2 = 79, p1[8 + (p2 - p1) / 2] = 10;
10
  fwrite(matrix, 240, 1, stdout);
11
}

Ist alles drin:
  - Geeigneter Datentyp
  - for-Schleife
  - Keine direkten Zuweisungen

Sollte passen, oder?

von Sparfuchs-Programmierer (Gast)


Lesenswert?

Profi-Programmierer schrieb:
> Sollte passen, oder?

Nein, das Programm ist unnötig lang! Das kostet Speicherplatz und 
Bandbreite. Besser ist:
1
#include <stdio.h>
2
3
int main()
4
{
5
  for (int c = 0; c < 240; c++)
6
    putchar((c + 1) % 16 ? c % 17 && (c + 16) % 15 ? 46 : 79 : 10);
7
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.