|
StarCraft II Inhalte
|
|
|||||||
| Registrieren | Hilfe | Benutzerliste | Kalender | Avatare | Banliste | Clanforum anfordern | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
|
|
Themen-Optionen | Ansicht |
|
|
#1
|
|
Ursadon
Registriert seit: Aug 2008
Beiträge: 98
|
Suche Programmierer der c kann
![]() ![]() Suche einen Programmier, der mir bei C helfen kann. Muss eine Aufgabe für die Uni machen und komme einfach nicht weiter ( Problem bei Verketteten Listen etc. ) aufgabestellung ![]() Falls mir einer helfen kann , bitte hier oder per pn melden. Bin echt am verzweifeln mfg smunks edit: hab mal die aufgabenstellung drangehängt Geändert von Smunks (30. Dezember 2010 um 11:13 Uhr) |
|
|
|
|
|
#2 |
|
Beiträge: n/a
|
|
|
|
|
#3 |
|
Ursadon
Registriert seit: Aug 2008
Beiträge: 98
|
das problem ist , es muss in c sein
|
|
|
|
|
|
#4 |
|
Beiträge: n/a
|
Ich habe den Algorithmus jetzt nicht näher betrachtet, aber ist die Zahl der Elemente der Warteschlange Q endlich?
Wenn ja, würde ich einfach ein Array und zwei Indexvariablen benutzen (headIndex und tailIndex). Das ist auch wesentlich effizienter als da mit verketteter Liste herumzutanzen. Brauchst halt a bisserl Logik noch, damit du es in konstant großem Speicherplatz unterbringst (wenn der tailIndex über die Arraygröße hinauswächst, modulo oder so). Geändert von Clawg (30. Dezember 2010 um 12:05 Uhr) |
|
|
|
#5 |
|
Goliath
Registriert seit: Apr 2003
Beiträge: 1.795
|
willst Du, dass wir jetzt deine Hausaufgabe machen? Nen kleiner Anhaltspunkt wo es hakt/wie weit Du es geschafft hast wäre ganz gut.
Habs mal überflogen, dürfte es eig. hinbekommen können. Allerdings nur in c++. (müsstest es dann selbst übersetzen, sollte aber nicht so das Problem sein). Wenn das okay ist sag bescheid, dann probier ich es.
__________________
Sie können rennen, aber sie können nicht gleiten! |
|
|
|
|
|
#6 |
|
Ursadon
Registriert seit: Aug 2008
Beiträge: 98
|
also ich habs nun soweit dass er die eingabe in einer matrix[][] speichert. also startpunkt zielpunkt und hindernisse
nun soll laut aufgabenstellung als ausgangspunkt der zielpunkt genommen werden hab nun erstmal die listen definiert mittels typedef struct {int x,y;} Koordinate; typedef struct {int z;Koordinate *liste;} Agenda; nun hackt es an der push bzw. pop funktion , also wie ich da ans ende der liste ein elemente hinzufüge und dann dieses wieder lösche und wie ich dann die benachbarten quadranten mit der matrix vergleiche, muss ich dann die hindernisse in ner separaten liste speichern oder kann er dies einfach aus der matrix rauslesen |
|
|
|
|
|
#7 |
|
Beiträge: n/a
|
Die einzigen zwei Funktionen die du brauchst, sind "von vorne entfernen" und "an hinten anfügen". Also lass die Pointer zuhause
![]() int liste[100]; int headIndex = 0; int tailIndex = 0; void push(int value) { liste[tailIndex%100] = value; tailIndex++; } int pop() { int value = liste[headIndex%100]; headIndex++; return value; }
|
|
|
|
#8 |
|
Goliath
Registriert seit: Apr 2003
Beiträge: 1.795
|
EDIT: Das hier ist natürlich eine c++ Lösung! ka obs so auch in c funzt
Für das Hinzufügen bzw Löschen von Listenelementen solltest Du Zeiger verwenden. D.h. innerhalb deines structs hast Du nicht nur eine Position, sondern noch zwei Zeiger (doppelt verkettete Listen finde ich persönlich netter, ginge sicherlich auch mit einer einfach verketteten). Diese Zeiger sind vom Typ des strucs. D.h. jedes Element deiner liste hat zwei Zeiger. Mit dem ersten Zeiger ('prev') zeigt es auf das vorangegangene Listenelement und mit dem zweiten Zeiger ('next') zeigt es auf das nächste Listenelement. Das erste Glied hat natürlich keinen Vorgänger und zeigt daher auf NULL. Ebenso hat das letzte keinen Nachfolger und zeigt auch auf NULL. Zusätzlich hast Du einen Zeiger, der immer (!) auf das erste Element deiner Liste zeigt ('head') und zwei temporäre Zeiger ('temp', 'temp2') mit denen DU munter pber die Liste laufen und sie gestaltet kannst. Ein Listenelement ans Ende der Liste hinzufügen: temp=head; // 'temp' zeigt auf das erste Glied der Liste. while (temp->next) //wird solange ausgeführt wie ein Nachfolgeelement ex. Das letze Element zeigt auf NULL, dann abbruch {temp=temp->next} // wenn ein Nachfolgeelement ex. gehst Du auf dieses. /*Schleife bricht ab und Du stehst auf dem letzten Element deiner Liste*/ temp2=temp; //setze temp2 auf die Adresse von temp temp->next=new 'Listenelement'; // erzeuge neues Listenelement temp=temp->next; //temp zeigt nun auf das soeben erstellte Element temp->prev=temp2; //zeige mit dem prev-Zeiger von temp auf das vorige Element (temp2) temp2->next=temp //zeigt mit dem next-Zeiger von temp2 auf das nächste Element (temp) temp->next=NULL; // der next Zeiger von dem letzten Element zeigt auf NULL. Das erste Element aus der Liste entfernen: if (head->next) // ist nurnoch ein Element vorhanden? { head=head->next; //setze das erste Element auf das 2. delete head->prev; //lösche das erste Element head->prev=NULL; //Der Zeiger der auf das ehemals erste Element gezeigt hat wird auf NULL gesetzt }
__________________
Sie können rennen, aber sie können nicht gleiten! |
|
|
|
|
|
#9 |
|
Ursadon
Registriert seit: Aug 2008
Beiträge: 98
|
Danke, ist des abe rnicht mit doppelten komplizierter als mit einfachen ?
Hab das von einem bekommen, nur versteh ich da grad ned viel typedef struct {int x,y;} Koordinate; typedef struct {int z;Koordinate *liste;} Agenda; Unterprogramm zur Agenda hinzufügen : void push(Agenda *a,Koordinate k) { a->z++; // Zähler um 1 Erhöhen a->liste = realloc(a->liste,a->z * sizeof k); //Speicher erweitern um k anzuhängen a->liste[a->z-1] = k; // k zur Liste hinzufügen } Unterprogramm letzten Wert entfernen Koordinate pop(Agenda *a) { return a->liste[--a->z]; } |
|
|
|
|
|
#10 |
|
Infestor
Registriert seit: Aug 2002
Beiträge: 1.059
|
Einfach und doppelt verkettete Listen in Programmiersprache X mal von Hand zu implementieren ist doch eine DER Standardaufgaben wenn man bischen was mit programmieren macht.
Da sollte es nun doch wirklich mehr als genug Lösungen samt Erklärung bei Google geben! €: Ok hab die Aufgabe nicht gelesen, sondern nur die Antworten. Aber so ne Labyrinthaufgabe is doch auch totaler Standard, vorallem wenn man nicht den weg finden soll sondern nur ob es den Weg gibt.
__________________
http://www.metalgigs.de - Der Konzert & Party Kalender für Deutschland. Für Metal, Rock, Gothic, Mittelalter und Metalcore. axandria.net - The Place for Ideas Geändert von Cherum (30. Dezember 2010 um 16:00 Uhr) |
|
|
|
|
|
#11 |
|
Belagerungspanzer (Belagerungsmodus)
Registriert seit: Dez 2003
Beiträge: 2.828
|
vorallem sind listen sehr einach zu erstellen.
__________________
Am Hof von St. Petersburg verkündete der französische Aufklärer Diderot den Atheismus und man forderte ihn zu einem Disput mit Euler auf, der in der Stadt eine Akademie leitete. Vor versammeltem Hofe wandte sich Euler mit freundlichem Gesicht an den Franzosen: „Monsieur, es ist a + b^n / n = x, also existiert Gott; antworten Sie!” Diderot, der von Mathematik keine Ahnung hatte, wußte nichts zu sagen und gab sich geschlagen. |
|
|
|
|
|
#12 | |
|
Community-Forum
Registriert seit: Jul 2002
Beiträge: 6.171
|
Zitat:
__________________
|
|
|
|
|
|
|
#13 |
|
Ursadon
Registriert seit: Aug 2008
Beiträge: 98
|
ich krieg des iwie ned hin....
|
|
|
|
|
|
#14 |
|
Beiträge: n/a
|
probier mal meine Lösung.
|
|
|
|
#15 |
|
Infestor
Registriert seit: Aug 2002
Beiträge: 1.059
|
Oder sag vielleicht mmal was genau dein Problem ist statt sowas allgemeinem.
|
|
|
|
|
|
#16 |
|
Beiträge: n/a
|
wenn er das könnte, dann wäre er ja nicht hier
![]() Problemdefinition ist meist schon die halbe Lösung. |
|
![]() |
|
||||||
| Themen-Optionen | |
| Ansicht | |
|
|





