לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 01-07-2008, 11:14
צלמית המשתמש של maind
  maind maind אינו מחובר  
 
חבר מתאריך: 08.10.02
הודעות: 827
בתגובה להודעה מספר 1 שנכתבה על ידי WolfsCaptain שמתחילה ב "בעיה בהכנת linked lists"

אצלי הקוד לא קורס - VC6. חוץ מזה אני רואה פה הרבה new בלי delete אחד בקוד מה שאומר שבטח יש פה דליפות. חוץ מזה יש פה עוד כמה בעיות, כמו אי שימוש בפרמטרים ועוד כמה שורות שלא הבנתי למה עשית, סידרתי את זה ככה מהר ותראה מה יצא:

קוד:
struct Projectile { //...members... Projectile *next; unsigned int ID; }; void projectileAdd(Projectile *start, Projectile *node) { if (start == NULL) return; //No starting point while(start->next != NULL) start = start->next; //Travel the list to find the head start->next = node; //Add a new one } void projectileRemove(Projectile *start, Projectile *node) { if (start == NULL || node == NULL || start == node) return; //No root or Nothing to find or Tring to remove the root for (; start != NULL; start = start->next) { if (start->next == node) { start->next = node->next; //Skip this one return; } } } int main(int argc, char* argv[]) { //Create root node Projectile *root = new Projectile; root->next = NULL; root->ID = 0; //Add a 10 node to the root for (unsigned int i = 0; i < 10; i++) { Projectile *p = new Projectile; p->next = NULL; p->ID = i+1; projectileAdd(root, p); } //Print the list printf("\n*** Printing list:\n"); for (Projectile *currente = root; currente != NULL; currente = currente->next) { printf("ID: %d\n", currente->ID); } //Add 3 nodes Projectile *a = new Projectile; a->next = NULL; a->ID = 11; projectileAdd(root, a); Projectile *b = new Projectile; b->next = NULL; b->ID = 12; projectileAdd(root, b); Projectile *c = new Projectile; c->next = NULL; c->ID = 13; projectileAdd(root, c); //Remove node whose ID is 12 and 11 projectileRemove(root, b); delete b; projectileRemove(root, a); delete a; //Remove ID 7 for (Projectile *currenta = root; currenta != NULL; currenta = currenta->next) { if (currenta->ID == 7) { projectileRemove(root, currenta); delete currenta; break; } } //Print the list printf("\n*** Printing list:\n"); for (Projectile *current = root; current != NULL; current = current->next) { printf("ID: %d\n", current->ID); } //Remove all printf("\n*** Removing all:\n"); for (Projectile *currentb = root->next, *temp; currentb != NULL; currentb = temp) { printf("Removing ID: %d\n", currentb->ID); projectileRemove(root, currentb); //Save the next node address and delete the current one temp = currentb->next; delete currentb; } //Print the list printf("\n*** Printing list:\n"); for (Projectile *currentd = root; currentd != NULL; currentd = currentd->next) { printf("ID: %d\n", currentd->ID); } //Delete the root delete root; root = NULL; return 0; }
_____________________________________
Error: Keyboard not found
Press F1 to continue

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 01-07-2008, 15:47
  WolfsCaptain WolfsCaptain אינו מחובר  
 
חבר מתאריך: 30.01.07
הודעות: 261
בתגובה להודעה מספר 2 שנכתבה על ידי maind שמתחילה ב "אצלי הקוד לא קורס - VC6. חוץ..."

אוקי, עכשיו זה פועל פעם אחת ואז קורס. הבעיה הפעם זה שני הפונקציות האלה(הוספתי גם את הstruct עם המשתנים שלו)
struct Projectile
{
SDL_Surface *img;
float x, y, yV, xV;
int g;
Projectile *next;
};


void projectilesMove(Projectile *start)
{
for(; start != NULL; start = start->next)
{
start->x += xV;
start->y += yV;
if(start->g == 1) start->yV += gravity;
}
}
void projectilesDraw(Projectile *start)
{
SDL_Rect r;
for(; start != NULL; start = start->next)
{
r.x = (int)start->x;
r.y = (int)start->y;
if(start->img != NULL) SDL_BlitSurface(start->img, NULL, screen, &r);
}
}

חמוד הטריק הזה עם ה for loop, לא ידעתי שאפשר להתעלם מהקטע הראשון.

אה ועוד שתי שאלות.

איך אפשר לשים פונקצייה בתור argument של פונקצייה ? בא לי לעשות איזה פונקצייה מרכזית שמפעילה פונקציות על כל הרשימה לפי מה שנותנים לה.

ואיך אני מפצל את כל הקוד שלי לקבצים קטנים ? כל פעם שאני מנסה סתם עם name.h זה לא מוצא אותם.

פפפפ... איך אני שונא את כל הבעיות האלה של עברית ואנגלית ביחד...
_____________________________________



נערך לאחרונה ע"י WolfsCaptain בתאריך 01-07-2008 בשעה 15:50.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 01-07-2008, 18:12
  AvivHa AvivHa אינו מחובר  
 
חבר מתאריך: 12.08.06
הודעות: 17
בתגובה להודעה מספר 1 שנכתבה על ידי WolfsCaptain שמתחילה ב "בעיה בהכנת linked lists"

הנה דוגמא טובה של פעולות בסיסיות על רשימה מקושרת

הגדרה:

קוד:
typedef struct item { int key; char data[MAX_DATA_SIZE]; struct item *next; } item;


יצירת איבר:
קוד:
item *makeNode(int key, char* data) { item *newNode = (item*) malloc(sizeof(item)); if (!newNode) return NULL; newNode->key = key; strcpy(newNode->data, data); newNode->next = NULL; return newNode; }


הוספת איבר לסוף הרשימה:

קוד:
item * add_last(item *head, item* newItem) { item *currItem; if (!head) return newItem; currItem = head; while(currItem->next) currItem = currItem->next; currItem->next = newItem; return head; }



חיפוש לפי מפתח:

קוד:
item *search(item *head, int key) { item *currItem = head; if (!head) return NULL; //loop through the list while (currItem) { if (currItem->key == key) return currItem; currItem = currItem->next; } //didn't find the item with the requested key return NULL; }


הדפסת כל המפתחות:

קוד:
void printKeys(item *head) { item *curr = head; while (curr) { printf("%d ", curr->key); curr = curr->next; } putchar('\n'); }


מחיקה:

קוד:
void emptyList(item *head) { item *temp, *curr = head; while (curr) { temp = curr; curr = curr->next; free(temp); } }

נערך לאחרונה ע"י AvivHa בתאריך 01-07-2008 בשעה 18:16.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:40

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר