• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

C Programmierung, Erklärung gesucht

sky1234

NPC
Mitglied seit
09.01.2013
Beiträge
4
Reaktionspunkte
0
C Programmierung, Erklärung gesucht

Kann mir jemand erklären wie folgender Ausdruck funktioniert: Ich beschäftige mich damit auf
welche Weise man ein Quadrat ausgeben kann. Dazu hab ich diesen Tipp bekommen aber ich verstehe das einfach nicht:
danke

void print_square (int *a, int n)
{
int x, y;
for (y=0; y<n; y++)
{
for (x=0;x<n;x++)
printf ("%3d", a[y*n+x]);
printf ("\n");
}
}
 
Was kannst du denn so in C programmieren? Ohne Vorkenntnise wirst du daraus eher nicht schlau, zumindest wie ein Array, ein Pointer und for-Schleifen funktionieren solltest du schon können.
Hast dus denn mal ausprobiert ob das funktioniert?

edit: Also funktionieren tuts. ;)
 
Zuletzt bearbeitet:
/Array, ein Pointer und for-Schleifen funktionieren /


das ist genau das was ich wissen wollte, Hilfe zur Selbsthilfe sozusagen
 
Hm, also ich weiß ja jetzt echt nicht, was du unter "ein Quadrat ausgeben" verstehst, aber das hier ist aus meiner Sicht was anderes.
Ich hab jetzt grad keine C-Entwicklungsumgebung installiert, aber wie schön, dass man das ganze auch online machen kann:
C code - 16 lines - codepad

Also a muss hier ein Array sein, welches die Zahlen enthält. Die Schleife geht von 0 bis n, schreibt darin die ersten n Zahlen raus und macht anschließend einen Zeilenumbruch.
Das blöde ist halt, dass dein Array mindestens n² groß sein muss.
 
Code:
void print_square (int *a, int n){          
     
     int x, y;

     for (y=0; y<n; y++){      
        
        for (x=0;x<n;x++)
        printf ("%3d", a[y*n+x]);
        printf ("\n");
        }
    } 


int main (void){
    
    int a[]={1,2,3,4,5,6,7,8,9};
    
    print_square(a,2);
    system("pause");
   
}
n definiert die Größe des Quadrats, in a stehen die Werte die dann zu sehen sind.
Mit dem Pointer *a wird das array übergeben, der zeigt dann auf die Adressen.
Die for-Schleifen laufen je n-mal, also so oft wie das Quadrat groß ist.
a[y*n+x] gibt dann jeweils ein Zeichen aus.

edit: Code hier zu posten geht auch mit Tricks nicht wirklich gut :|
edit 2: Danke an unten :)

Wenn du keine Ahnung hast was ein Array ist, wie eine for-Schleife funktioniert oder so, dann ist das Beispiel auf jeden Fall noch zu schwierig für dich, mach erst mal was leichteres
 
Zuletzt bearbeitet:
edit: Code hier zu posten geht auch mit Tricks nicht wirklich gut :|
Code:
#include <stdio.h>
 
void print(int);
 
int main()
{
  int n;
 
  scanf("%d", &n);
 
  print(n);
 
  return 0;
}
 
void print(int n)
{
  static int c = 1;
 
  if (c == n+1)
    return;
 
  printf("%d\n", c);
  c++;
  print(n);
}
Hat aber erst in der Vorschau funktioniert, nachdem ich den Editor zum posten gewechselt habe.
 
Achso, wenn du C lernen willst, dann les dir doch erstmal das hier durch: Galileo Computing :: C von A bis Z

Da das komplette Buch online verfügbar und somit kostenlos ist, ist das bestimmt ein guter Start wenn du mal reinschnuppern willst um dich probehalber mit C vertraut zu machen.
Allerdings hat mir mal n sehr erfahrener Programmier folgendes zu dem Buch (und nem anderen) gesagt
Jo, sauber die beiden Bücher mit dem wohl schlechtesten Ruf "evar" rausgesucht
Also wenn du richtig einsteigeni willst, dann würd ich mich nicht auf dieses Buch stützen
 
Ok, ich will nächstes Semester Inf studieren. EIn Freund hat mir ein Programm gegeben, was die am ende vom ersten Semester können müssen.
Jetzt versuch ich halt daran herauszufinden, was dort eingebaut ist und was es bedeutet.

Ich hab bisher noch gar nicht programmiert. Aber fürs 1. Semester kanns ja nicht so schwer sein. Das soll mir als Vorverständnis erstmal reichen.

Ich dachte der drucken Befehl ist am einfachsten, daher kopier ich den mal hier rein.

Die ganze Datei hab ich am Ende eingefügt.
Also Array, Pointer &Schleife hab ich bisher....lol aber ich versteh bisher nur Bahnhof, ich weiß nichtmal was das mit dem Quadrat überhaupt soll.

Was werden da für Nummern getestet?
Auf jedenfall wird ein Quadrat erzeugt, aber s += a[y*n+x];
+= bedeutet ja s=s+(a[y*n+x]) , kann mir vielleicht noch jemand verraten was dieser Ausdruck bedeutet?

edit: hab grad eine Zahl eingegeben und jetzt ist die CPU auf 100%, sonst passiert nix, also funktioniert es nicht, aber jetzt weiß ich immerhin , oder auch nicht, was auf mich zukommt.....
Einzelne Zeilen kann man nachschlagen, aber die Gesamtidee da rein zubringen, scheint mir ziemlich heftig.

Kann man das in 1 Monat lernen (Vorbereitung, ich mein länger sollte man ja für ein Fach nicht brauchen oder?), oder ist das aussichtslos?

int pruefe_Quadrat (int *a, int n)
{
int x, y, i, s;
int sum = n*(n*n + 1) / 2;

for (y = 0; y<n; y++)
{
s = 0;
for (x=0; x<n; x++)
s += a[y*n+x];
if (sum != s)
return 0;
}
for (x = 0; x<n; x++)
{
s = 0;
for (y=0; y<n; y++)
s += a[y*n+x];
if (sum != s)
return 0;
}

s = 0;
for (i=0; i<n; i++)
s += a[i*n+i];
if (s != sum)
return 0;


s = 0;
for (i=0; i<n; i++)
s += a[(n-i-1)*n+i];
if (s != sum)
return 0;
return 1;
}
 

Anhänge

  • quadrat.txt
    2 KB · Aufrufe: 39
Zuletzt bearbeitet:
Du lernst das von Anfang an im 1. Semester, da jetzt direkt mit solchen Sachen anzufangen hilft dir nicht. Wenn du wirklich schon lernen willst, dann mach das von Anfang an, mit einem Buch oder Tutorial, wo C schrittweise eingeführt und erläutert wird.

a[] ist ein Array, die Zahl in der eckigen Klammer bestimmt beim Aufruf welches Element daraus ausgewählt wird, also z.B. a[3] ist eben das, was an der 4. Stelle des Arrays steht.

Aber wie schon gesagt, bevor du dich mit so einem Beispiel beschäftigst, solltest du erst mal von Anfang an lernen, was Arrays sind, wie eine for-schleife funktioniert usw.
 
a[] ist ein Array, die Zahl in der eckigen Klammer bestimmt beim Aufruf welches Element daraus ausgewählt wird, also z.B. a[3] ist eben das, was an der 4. Stelle des Arrays steht.
Man sollte vielleicht auch noch zum besseren Verständnis erwähnen, dass a[0] die erste Stelle ist und deshalb a[3] die vierte und nicht die dritte. :-D
 
Zurück