נשלח בתאריך: 02 July 2005 בשעה 16:47 | | IP רשוּם
|
|
|
|
היי רשמתי תוכנית שהיא אמורה לבצע את הדבר הבא
רצה בלולאה אינסופית, תנאי העצירה הוא קליטת מחרוזת ריקה מהמשתמש, כלומר כזו שאורכה הוא 0. על התוכנית לבקש את המחרוזת מהמהשתמש. המחרוזת יכולה להכיל רווחים. אורך המחרוזת המכסימלי הוא 100 תווים. כל מחרוזת תישמר בשדה name בתוך מבנה מסוג Rec
עם קליטת מחרוזת שאינה ריקה - התכנית תבקש הקצאה דינאמית עבור המבנה, תעתיק לתוכו את המחרוזת, ותקצה לו מספר id. (מספרי id יתחילו מ100 ויתקדמו באחד עבור כל מבנה חדש).
כישלון בפעולת ההקצאה הדינאמית יגרור הודעת טעות וסיום. לאחר מכן תציב התוכנית את המבנה - בראש שרשרת המבנים. כלומר... המחרוזת האחרונה שתיקלט - תוצב בראש השרשרת.
בקליטת מחרוזת ריקה... התוכנית "משנה כיוון" ומתחילה "לפרק" את השרשרת. על
התוכנית להדפיס את פרטי המבנה שבראש השרשרת, "לנתק" אותו מהשרשרת, לשחרר
את הזיכרון שהוקצה לו ולהעביר את ראש השרשרת - אל המבנה הבא. כך הלאה... עד לסיום השרשת.
הקוד:
קוד:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define LEN 100 /*defintion for max len of the string*/
#define NULL 0
struct rec { /*define the struct from the type Rec*/
int id; /*defintion integer in the struct for the id*/
char name[LEN]; /*defintion array of chars(string) in the struct for name*/
struct rec *next;
};
typedef struct rec Rec;
int main()
{
int i=LEN;
char str[LEN];
Rec *temp;/*temp is pointer for the struct for alloc the struct*/
Rec *first=NULL;
clrscr();
printf("Building the connected structures:\n");
do
{
printf("Please insert a string:");
gets(str);
if (*str)
{
temp=(Rec*)calloc(1,sizeof(Rec));/*alloc the struct*/
if(!temp)
{
printf("allocation failed!!");
return 0;
}
strcpy(temp->name,str);/*copy the string to the feald in the struct*/
temp->id=i++;/*to get the values to the struct throw the pointer*/
temp->next=first;
first=temp;
}
}
while (*str);
printf("Decomposing the connected structures:\n");
while (first)
{
printf("id:%d, name: %s\n",first->id,first->name);
temp=first;
first=first->next;
free(temp);
}
getch();
return 0;
}
|
|
|
|