Zum Inhalt springen

konsti4u

Mitglieder
  • Gesamte Inhalte

    37
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von konsti4u

  1. :-O Wie meinste das jetzt? Natürlich sollte man ihn casten... Und zum Code, das ist zuviel Code, brauchen da länger um deinem Gedankengang zu folgen, zwar teilweise kommentiert aber vor allem die Zeigerveränderungen solltest du genauer erklären wo was warum reinkommt... Versuch doch mal den Code Stückchenweise zu testen (prüfen auf NULL-Zeiger, ausgeben der Zahlen in der Liste usw.)... wenn ich beide START = ENDE aus dem ersten COde ändere, dann kommt er in eine Endlosschleife: Temporary breakpoint 1, main () at Aufgabe3fertig.c:17 warning: Source file is more recent than executable. 17 First = NULL; (gdb) n 19 printf("Listenlaenge:"); // Abfragen (gdb) n 20 scanf("%d",&N); // und Einlesen wie lang die Liste wird (gdb) n Listenlaenge:5 23 First = (Zeiger) malloc(sizeof(NODE)); First->zahl=1; First->next = NULL; Last=First; (gdb) n 24 for (i=2; i<=N; i++) (gdb) n 26 q = (Zeiger)malloc(sizeof(NODE)); (gdb) n 27 q->zahl=i; (gdb) n 28 q->next = NULL; (gdb) n 29 Last ->next =q; (gdb) n 30 Last = q; (gdb) n 24 for (i=2; i<=N; i++) (gdb) n 26 q = (Zeiger)malloc(sizeof(NODE)); (gdb) n 27 q->zahl=i; (gdb) n 28 q->next = NULL; (gdb) n 29 Last ->next =q; (gdb) n 30 Last = q; (gdb) n 24 for (i=2; i<=N; i++) (gdb) n 26 q = (Zeiger)malloc(sizeof(NODE)); (gdb) n 27 q->zahl=i; usw
  2. Nein, das hast du nicht, du hast First auf Last gesetzt, also du hast gesagt, dass First nun dorthin zeigen soll wie Last (Last zeigt nirgendwohin. Also zeigt auch First nun auch nirgendwohin) First = Last ist nicht dasselbe wie Last = First! Schau zu dass du das Programm nochmal durchgehst und nach Fehlern suchst, wenn du Linux benutzst, kompilier das Programm mit -g und debugge es mit dem gdb: gdb ./programm dann "start" und "n" für next, dann zeigt er dir den Fehler und in welcher Zeile er im Code ist. MfG
  3. konsti4u

    structs

    Also du willst in deinem Array 5 Adressen speichern? dann lege dir eine variable adressen an welches auf die 5 Adressen zeigt, dementsprechend muss die Rückgabe der Funktion t_adresse** sein, da Pointer auf Pointer: t_adresse* adressen[5]; /*Braucht man nicht initialisieren, da Größe bekannt (sind nur Pointer) */ int k; for(k=0; k<5; k++) { printf("Adresse: %d \n", i); t_adresse *speicher; speicher = malloc(sizeof(t_adresse)); printf("Name eingeben: \n"); fgets(speicher->name,50,stdin); printf("Vorname eingeben: \n"); fgets(speicher->vorname,50,stdin); printf("Postleitzahl eingeben: \n"); do { scanf("%i", speicher->plz); }while(getchar() != '\n'); } return adressen; } Nicht getestet!
  4. konsti4u

    structs

    Da ist ganz schön was durcheinander, also: t_adresse *speicher[5]; Damit sagst du, dass speicher ein array der Länge 5 ist, wo jedes Arrayelement auf einen struct t_adresse zeigt, das war so sicher nicht gedacht. Du meinst denk ich mal: t_adresse* speicher; speicher = malloc(sizeof(t_adresse)); Nun versuchst du den Namen einzulesen und im speicher->name zu speichern. fgets(speicher.name,sizeof(speicher.name),stdin); So geht das nicht, weil speicher nur ein Zeiger ist, den musst du erst dereferenzieren, also: fgets((*speicher).name,sizeof(speicher.name),stdin); oder aber andere Schreibweise: fgets(speicher->name,sizeof(speicher.name),stdin); Und das gleiche Spiel bei dem Rest, sollte dann gehen (nicht geprüft)
  5. Program received signal SIGSEGV, Segmentation fault. 0x08048578 in main () at Aufgabe3fertig.c:29 29 Last ->next =q; Du hast Last nirgendwohin referenziert (zeigt auf nichts) und du versuchst auf einen Wert zuzugreifen...
  6. Also eine sortierte Liste ist nicht schwer, du musst einfach die Elemente von Anfang an sortiert einfügen :-) z.B: Aufsteigend sortierte Liste: 1. Erstes Element immer einfügen (head auf neu) neu->NULL 2. Falls das neue Element kleiner als das erste, dann lasse neu auf erste zeigen und das neue das erste werden (head auf neu) neu->alt_neu->NULL 3. Ansonsten gehe durch die Liste bis man NULL erreicht und prüfe jeweils ob das neue Element < nächste Element, wenn ja, dann tu das neue element auf das nächste zeigen und das derzeitige element auf das neue. derzeitig->neu->next 4. Man muss es ganz hinten anfügen letzte->neu->NULL Falls Probleme kann ich auch dafür ein Code-schnippsel schreiben, oder am besten frag erst :-)
  7. konsti4u

    Schachbrett

    Da haste natürlich Recht
  8. Verkettete Listen und andere Objekte macht man in C mit structs, structs sind eig. Verbunddatentypen, naja hier ein Beispiel. Verkettete Listen bestehen ja eig nur aus Listenelementen (Nodes) die immer auf den nächsten zeigen. Wenn ein Node auf keinen zeigt, so hat man das Ende der Liste erreicht. Node -> Node -> Node -> NULL Bsp für ein Listenelement welches eine Zahl speichert, und einen Zeiger auf das nächste Listenelement. struct node { int data; struct node* next; }; /* Head-Zeiger IMMER auf das erste Element der Liste */ struct node* head = NULL; int insertElement(int data) { struct node *neu; /* Erstelle das zum Einfügen bereite neue Element */ neu =(struct node*)malloc(sizeof(struct node)); if(neu == NULL){ perror("Malloc failed"); return -2; } neu->next=NULL; neu->data = data; /* Falls noch kein Element da, wird neu das erste Element */ if(head == NULL) { head=neu; return data; } /*Ansonsten füge es ganz hinten ein */ /* Alle Werte durchgehen und ggf einfügen. */ pt = head; /*Laufzeiger zeigt auf Kopf */ while(pt->next != NULL) pt = pt.next; pt.next = neu; return data; } //Zur Schreibweise: pt->next ist das gleiche wie: (*pt).next
  9. konsti4u

    Schachbrett

    Mensch die Edit-Beschränkung ist echt blöd in dem Forum :-D Habs falsch verstanden + nen Fehler drin gehabt, so müssts aber gehen x) int counter=1; ... ... for (int i = 7; i <= 0; i--) { schrift = new JLabel(letters+""+counter); schrift.setHorizontalAlignment(JLabel.CENTER); horizontalPanel.add(schrift); } counter++; if (counter == 8) counter = 1; //Hö? es klappt? aber der andere macht doch was anderes eig :-D
  10. konsti4u

    Schachbrett

    Um den a1,b1,... in die oberste Zeile zu schreiben und dann in die nächste a2,b2,usw machst du das am besten mit einem counter, hier ein Bsp: Wenn du unten a1,b1... und dann drüber a2,b2 usw haben willst, musst du nur die schleife von unten nach oben durchgehen... int counter=1; for (int i = 7; i <= 0; i--) { schrift = new JLabel(letters+""+counter); schrift.setHorizontalAlignment(JLabel.CENTER); horizontalPanel.add(schrift); counter++; } counter = 0; Code nicht getestet, aber denke sollte gehen
  11. konsti4u

    C potenzrechnung ?

    Da editieren nicht geht... mir fällt da noch ein, für pow musst du die math.h includen und evtl.mit dem flag -lm compilieren, außerdem gibt pow(x,y) einen double-Wert zurück und int long gibts in C ja gar nicht :-D Das habe ich noch von Object Pascal im Blut Naja wie gesagt, brauchst ja eh double, oder du machst dir eine eigene Methode, dann am besten mit long, und mein Code da funktioniert nur mit positiver Basis (x). Aber leicht zu verfollständigen MfG
  12. konsti4u

    C potenzrechnung ?

    Und nun eine ausführliche Antwort: Das Problem ist, dass deine Methode ebenfalls pow heißt, genauso wie die Funktion aus der Standard-C-Library. Lösung: Benenn deine Methode um pow(2,3) = 2³ D.h. du brauchst gar keine Abfragen ob x = 1, weil pow(1,irg.was)=1^irg.was=1 ist. Auch brauchst du das richtige Ergebnis nicht nochmal mit x zu multiplizieren, das würde nur den Exponenten um 1 erhöhen, außer das ist von dir so gewollt. Noch ein Tipp: Benutze als Rückgabewert long int, da die Werte schnell wachsen und du mit int schneller einen Überlauf bekommen könntest als mit long int. Wenn du pow selber implementieren willst, dann ist es am einfachsten mit einer Schleife: long int eigenepow(int x, int y) { int i; long int ergebnis = 1; for (i=0; i<x; i++) ergebnis = ergebnis * x; return ergebnis; } Code nicht getestet

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...