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 intusw...
-
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!