StarCraft 2 Forum | inStarCraft.de by ingame™
 
Alt 30. Dezember 2010, 10:49   #1
Smunks
 
Benutzerbild von Smunks
Ursadon
 
Registriert seit: Aug 2008
Beiträge: 98
Suche Programmierer der c kann

Advertising
Hallo, wusste nicht in welchen Bereich ich es machen soll, falls falsch bitte verschieben.

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)
Smunks ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 10:59   #2
Clawg
 
Beiträge: n/a
Poste doch das Problem in das Mathe/Physik/Chemie & Co. Forum.

Spoiler
 
Mit Zitat antworten
Alt 30. Dezember 2010, 11:13   #3
Smunks
 
Benutzerbild von Smunks
Ursadon
 
Registriert seit: Aug 2008
Beiträge: 98
das problem ist , es muss in c sein
Smunks ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 12:03   #4
Clawg
 
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)
 
Mit Zitat antworten
Alt 30. Dezember 2010, 13:06   #5
Ronschk
 
Benutzerbild von Ronschk
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!
Ronschk ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 13:18   #6
Smunks
 
Benutzerbild von Smunks
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
Smunks ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 13:46   #7
Clawg
 
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;
}

 
Mit Zitat antworten
Alt 30. Dezember 2010, 13:54   #8
Ronschk
 
Benutzerbild von Ronschk
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!
Ronschk ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 14:07   #9
Smunks
 
Benutzerbild von Smunks
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];
}
Smunks ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 15:57   #10
Cherum
 
Benutzerbild von Cherum
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.

Geändert von Cherum (30. Dezember 2010 um 16:00 Uhr)
Cherum ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 15:59   #11
kingcools
 
Benutzerbild von kingcools
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.
kingcools ist gerade online  
Mit Zitat antworten
Alt 30. Dezember 2010, 16:04   #12
Chnum
 
Benutzerbild von Chnum
Community-Forum
 
Registriert seit: Jul 2002
Beiträge: 6.171
Zitat:
Zitat von Clawg Beitrag anzeigen
Poste doch das Problem in das Mathe/Physik/Chemie & Co. Forum.
ich bin so frei...
__________________
Chnum ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 16:53   #13
Smunks
 
Benutzerbild von Smunks
Ursadon
 
Registriert seit: Aug 2008
Beiträge: 98
ich krieg des iwie ned hin....
Smunks ist offline  
Mit Zitat antworten
Alt 30. Dezember 2010, 18:48   #14
Clawg
 
Beiträge: n/a
probier mal meine Lösung.
 
Mit Zitat antworten
Alt 31. Dezember 2010, 17:08   #15
Cherum
 
Benutzerbild von Cherum
Infestor
 
Registriert seit: Aug 2002
Beiträge: 1.059
Oder sag vielleicht mmal was genau dein Problem ist statt sowas allgemeinem.
Cherum ist offline  
Mit Zitat antworten
Alt 01. Januar 2011, 01:31   #16
Clawg
 
Beiträge: n/a
wenn er das könnte, dann wäre er ja nicht hier
Problemdefinition ist meist schon die halbe Lösung.
 
Mit Zitat antworten
Antwort
Zurück   StarCraft 2 Forum | inStarCraft.de by ingame™ > Community-Foren > Mathe/Physik/Chemie & Co.

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.


ingame Netzwerk
Support | AGB | Probleme mit der Werbung melden
Online Werbung | Mediadaten | Unternehmen | Karriere | Presse | Impressum

© ingame GmbH, ingame™, in™ und incup™ sind eingetragene Markenzeichen der ingame GmbH. Verwendung von Inhalten nur mit schriftlicher Genehmigung.