Ich brauche Hilfe!...



  • Ich muß ein Programm erstellen das mir 1.in eine Matrix A mit z Zeilen u. s Spalten nur Werte 0 und 1 ablegt.2.ermittelt und ausgibt,wieviele quadratische Teilmatrizen also mit n Zeilen und spalten in A enthalten sind,und wie viele dieser quadratischen Teilmatrizen in der Hauptdiagonalen nur den wert 1 besitzen.
    Weil ich 3.noch die Laufzeitfunktion O(n)berechnen muß sollte das programm so klein wie möglich sein.Ich hab folgendes Programm erstellt.Dies ist aber noch relativ groß.Kann man das Programm noch irgendwie Programmzeilenmaeßig verkleinern?

    #include<stdio.h>
    
    int main()
    {
    int m1[100][100];
    int s,z,m;int t1=1;int k=0;int ze=2;int sp=2;int merker=0;int m2,m3,m4;int i=1;int h=0;
    int j=1;int n1=2;int t=4;int l1=1;int l2=2;int z1=1;int g=0; int g2=0; int g3=0; int g5=0;int n2=0;
    
    do{
    system("clear");
    printf("------------Eingabe der Matrixwerte-----------------\n\n");
    printf("Geben Sie die Spaltenlaenge der Matrix ein (max.5):");
    scanf("%d",&s);
    printf("Geben Sie die Zeilenlaenge der Matrix ein (max.5) :");
    scanf("%d",&z);
    }
    while(s>=6||z>=6);
    printf("\n----------------------------------------------------\n");
    printf("Die Spaltenlaenge beträgt:%d\n",s);
    printf("Die Zeilenlaenge betraegt:%d\n",z);
    printf("----------------------------------------------------\n");
    
    int t2=s*z;
    
    for(j=1;j<z+1;j++)
    {
    for(i=1;i<s+1;i++)
    {
    printf("Eingabe [%d von %d] -- Zeile %d Spalte %d:",t1,t2,j,i);
    scanf("%d",&m1[i][j]);
    if((m1[i][j]==0)||(m1[i][j]==1)){
    t1+=1;
    }
    else{
    printf("---------------------------------------------------------------------\n");
    printf("Bitte Geben Sie nur eine 1 oder eine 0 als Zahl ein!\n");i=i-1;j=j;t1=t1;t2=t2;
    printf("---------------------------------------------------------------------\n");
    }}}
    system("clear");
    printf("Die Darstellung der Matrix:\n");
    for(j=1;j<z+1;j++)
    {
    printf("\n");
    for(i=1;i<s+1;i++)
    {
    printf("%d ",m1[i][j]);
    }}
    printf("\n\n");
    
    for(z1=1;z1<s;z1=z1+2,l1=l1+2,l2=l2+2)
    {
    if(m1[l1][l1]&&m1[l2][l2]==1){h=h+1;}
    if((h>=1)&&(s>=3)&&(z>=3)&&(m1[3][3]==1)){g3=1;}
    if((h==2)&&(s==5)&&(z==5)&&(m1[5][5]==1)){g5=1;}
    if(h==2){g=1;}
    }
    for(i=1;i<s+1;i=i+2,ze=i+1)
    {
    for(j=1;j<z+1;j=j+2,sp=j+1)
    {
    if(j==1){sp=2;}
    if(((m1[i][j])==1)&&((m1[ze][sp]))==1)k=k+1;
    }}
    printf("---------------------Teilmatrix-Belegung---------------------------\n\n");
    for(i=1;i<s;i++,n1++)
    {
    n2=(n1*n1);
    if((z%n1||s%n1)==0)
    {
    n2=(n1*n1);
    if(((s*z)%n2)==0)
    {
    m=(s*z)/n2;
    merker=1;
    printf("[%d] [%dx%d] Teilmatrize(n), sind moeglich.\n",m,n1,n1);
    }}
    else
    {
    if(((s%n1)==0)&&((z%n1)!=0)&&((merker)==0))
    {
    m2=((z)-(z%n1))*(s)/n2;
    printf("[%d] [%dx%d] Teilmatrize(n), sind moeglich.\n",m2,n1,n1);
    }}
    if(((z%n1)==0)&&((s%n1)!=0)&&((merker)==0))
    {
    m3=((s)-(s%n1))*(z)/n2;
    
    printf("[%d] [%dx%d] Teilmatrize(n), sind moeglich.\n",m3,n1,n1);
    }
    else
    {
    if(((z%n1)!=0)&&((s%n1)!=0)&&((merker)==0))
    {
    m4=((s)-(s%n1))*((z)-(z%n1))/n2;
    
    printf("[%d] [%dx%d] Teilmatrize(n), sind moeglich.\n",m4,n1,n1);
    s+1;
    }}}
    printf("\n");
    printf("---------------------Matrix Diagonal Belegung----------------------\n\n");
    printf("[%d] [2x2] Teilmatrize(n) nur mit Einsen in der Hauptdiagonale.\n",k);
    printf("[%d] [3x3] Teilmatrize(n) nur mit Einsen in der Hauptdiagonale.\n",g3);
    printf("[%d] [4x4] Teilmatrize(n) nur mit Einsen in der Hauptdiagonale.\n",g);
    printf("[%d] [5x5] Teilmatrize(n) nur mit Einsen in der Hauptdiagonale.\n",g5);
    printf("-------------------------------------------------------------------\n");
    }
    


  • c-newb2005 schrieb:

    Weil ich 3.noch die Laufzeitfunktion O(n)berechnen muß sollte das programm so klein wie möglich sein.

    Hast du deshalb auf die Einrückung verzichtet und schreibt solche Sachen wie

    int s,z,m;int t1=1;int k=0;int ze=2;int sp=2;int merker=0;int m2,m3,m4;int i=1;int h=0;
    int j=1;int n1=2;int t=4;int l1=1;int l2=2;int z1=1;int g=0; int g2=0; int g3=0; int g5=0;int n2=0;
    

    😃

    Trotzdem noch viel Glück demjenigen, der sich hier näher mit befassen will. Mir fehlt dazu momentan etwas die Muse. Deshalb nicht böse sein.



  • Klar kann man das verkleinern.

    #define a printf
    #define b for
    #define c int

    usw...



  • Die Anzahl der Zeilen des Programmtextes hat mit der Laufzeitberechnung
    nichts zu tun. Da interessieren vielmehr Instruktionen, Schleifen und
    Verzweigungen. Dein Ziel sollte es also sein, die Struktur möglichst
    überschaubar zu halten, und auf unnötigen Schnickschnack zu verzichten.
    Es wäre also sicher nicht die beste Idee, jetzt eine grafische Benutzer-
    oberfläche einzubauen, und den Code inhaltlich zu vergrößern. Ob sich dein
    Algorithmus nun auf 10 oder auf 100 Zeilen Text verteilt ist dabei absolut
    egal. Die Variablendefinitionen fliessen beispielsweise in die Berechnung
    gar nicht mit ein, sprich:

    int a, b, c;

    und

    int a;
    int b;
    int c;

    ist gleichwertig. Und nun füg' Leerzeilen ein, und formatier den Code
    ordentlich. Nur Mut!



  • 24x7_coder schrieb:

    Die Anzahl der Zeilen des Programmtextes hat mit der Laufzeitberechnung
    nichts zu tun. Da interessieren vielmehr Instruktionen, Schleifen und
    Verzweigungen. Dein Ziel sollte es also sein, die Struktur möglichst
    überschaubar zu halten, und auf unnötigen Schnickschnack zu verzichten.
    Es wäre also sicher nicht die beste Idee, jetzt eine grafische Benutzer-
    oberfläche einzubauen, und den Code inhaltlich zu vergrößern. Ob sich dein
    Algorithmus nun auf 10 oder auf 100 Zeilen Text verteilt ist dabei absolut
    egal. Die Variablendefinitionen fliessen beispielsweise in die Berechnung
    gar nicht mit ein, sprich:

    int a, b, c;

    und

    int a;
    int b;
    int c;

    ist gleichwertig. Und nun füg' Leerzeilen ein, und formatier den Code
    ordentlich. Nur Mut!

    Sorry das ich jetzt erst drauf antworte aber ich kann das einfach nicht so stehenlassen.Also wichtig für die Berrechnung der Ordnung der Laufzeit ich rede jetzt nicht von der reinen Laufzeit T(n) sondern O(n),also von besonderer Wichtigkeit sind nur Schleifen,und Prozedur aufrufe,da Verzweigungen zu den einfachen Operationen gehören und den stand.Wert O(1) besitzen...



  • #define CODE //Hier dein Programmcode
    
    CODE
    

    😃



  • hohesC schrieb:

    #define CODE //Hier dein Programmcode
    
    CODE
    

    😃

    Bin ja mal auf euer spiel gespannt:-)welche engine habt ihr denn benutzt?Eure Grafiken sind wirklich nicht schlecht....Ich wünsche euch viel Erfolg!


Anmelden zum Antworten