Προς το περιεχόμενο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • 0
antonios88

οποιος θελει & μπορει,ας με βοηθησει!επειγον!

Ερώτηση

καλησπερα και χρονια πολλα!

λοιπον,παιδια εχω μια εργασια μεχρι τα μεσανυχτα και μου εχει βγει η πιστη!οποιος

θελει ας με βοηθησει με καθε τροπο!εστω να μου πει τι να κανω!!!

εχω αυτην την ασκηση:

>
Θεματολογία: Δυαδικά Δέντρα Αναζήτησης
[i]
ΜΕΡΟΣ 1
Στην παρούσα άσκηση θα χρησιμοποιήσετε τα αρχεία φοιτητών και τηλ/νων που δημιουργήσατε στην άσκηση 5, μόνο που η δομή που θα τα χειρίζεται θα είναι τυχαίο δυαδικό δέντρο αναζήτησης. Πιο συγκεκριμένα:
α) Δημιουργήστε τα αρχεία φοιτητών και τηλ/νων σύμφωνα με την ασκ. 5. 
β) Δημιουργήστε τη δομή τυχαίου δυαδικού δέντρου αναζήτησης (search, insert, delete) για τους φοιτητές (κλειδί: AM). 
γ) Δημιουργήστε ένα δεύτερο τυχαίο δυαδικό δέντρο αναζήτησης για τα τηλ/να (κλειδί: AM). Αφού θα υπάρχουν επαναλαμβανόμενες τιμές στο κλειδί έχετε δύο επιλογές: i) Ενθέτετε ίδιες τιμές πάντα από δεξιά (το αποτέλεσμα είναι ένα δέντρο που έχει κόμβους όπου οι τιμές κλειδιού μπορεί να συμπίπτουν), ii) Όλοι οι κόμβοι του δέντρου είναι διαφορετικοί ως προς την τιμή κλειδιού, και από κάθε κόμβο ξεκινά μια λίστα με τα τηλ/να που αντιστοιχούν σε ίδιο ΑΜ.
δ) Φορτώστε τα αρχεία στα αντίστοιχα δέντρα.
ε)  Υλοποιήστε τα ακόλουθα ερωτήματα: 
i) Αναζήτηση τηλ/νων βάσει ΑΜ.
ii) Αναζήτηση τηλ/νων βάσει Επ/μου. Για να λύσετε το ερώτημα, θα πρέπει πρώτα να διαπεράσετε το δέντρο των φοιτητών για να βρείτε τον αντίστοιχο ΑΜ (με όποιον τρόπο θέλετε inorder, preorder, postorder).
iii) Σβήστε από τις δομές τις εγγραφές των φοιτητών και τηλ/νων που αντιστοιχούν σε ΑΜ που είναι πολλαπλάσια του 10.
στ) Συγκρίνετε το πλήθος των συγκρίσεων (επισκέψεις σε κόμβους) για καθένα από τα παραπάνω ερωτήματα σε σχέση με την υλοποίηση τη βασισμένη σε λίστες. Τι παρατηρείτε; Σχολιάστε.

ΜΕΡΟΣ 2 (bonus: +0.5 στην τελική βαθμολογία του εργαστηρίου). 
Θέλουμε να επιταχύνουμε την εκτέλεση ερωτημάτων που αφορούν στην αναζήτηση βάσει ΑΜ στο δέντρο των φοιτητών και κατόπιν βάσει ΑΜ στο δέντρο των τηλ/νων. Παραδείγματα τέτοιων αναζητήσεων είναι:
(i) Βρες το ον/μο και τα τηλ/να του φοιτητή με ΑΜ=23
(ii) Το (iii) ερώτημα του μέρους (1.ε).
(iii) Σβήστε τις εγγραφές των τηλ/νων που αντιστοιχούν σε ΑΜ που είναι πολλαπλάσια του 10.
Για το λόγο αυτό προτείνεται η εξής λύση. Κάθε κόμβος στο δέντρο των φοιτητών θα έχει έναν επιπλέον δείκτη που θα δείχνει στον κόμβο του δέντρου των τηλ/νων που έχει ίδιο ΑΜ. Η λύση αυτή προϋποθέτει υλοποίηση του δέντρου των τηλ/νων σύμφωνα με την επιλογή (ii) στο μέρος (1.γ).
Τροποποιήστε τις insert και delete έτσι ώστε να υλοποιείται το παραπάνω σχήμα. Υποθέστε ότι δεν μπορεί να υπάρξουν τηλ/να με ΑΜ που δεν υπάρχει στο δέντρο των φοιτητών. Προσέξτε τα εξής:
Δέντρο φοιτητών
insert: δε χρειάζεται αλλαγές.
delete: πρέπει εκτός του κόμβου που θα σβηστεί στο δέντρο των φοιτητών να σβηστεί και ο αντίστοιχος κόμβος στο δέντρο τηλ/νων.
Δέντρο τηλ/νων
insert: πρέπει εκτός των άλλων να βρίσκει στο δέντρο των φοιτητών το αντίστοιχο ΑΜ και να βάζει τον επιπλέον δείκτη να δείχνει στον κόμβο που έβαλε στο δέντρο τηλ/νων.
delete: πρέπει να ψάχνει στο δέντρο των φοιτητών και να θέτει το δείκτη που δείχνει στον κόμβο που πρόκειται να σβηστεί σε NULL.
Τρέξτε τα ερωτήματα (i), (ii) και (iii) (αυτού του μέρους) και συγκρίνετε το πλήθος επισκέψεων σε κόμβους της προτεινόμενης τροποποίησης σε σχέση με τα αρχικά δέντρα. Τι παρατηρείται; Εξηγήστε από που προκύπτουν οι διαφορές στην απόδοση[/i].

ξεκιναμε:εχω φτιαξει με τα χιλια ζορια την ασκηση5 που ζηταει η ασκηση6(η παρουσα).

οταν την τρεχω ομως μου βγαζει σφαλμα!ενας συμφοιτητης ειπε οτι ειναι φυσιολογικο!!εσεις τι λετε?

ΑΣΚΗΣΗ 5

>#include<stdio.h>
#include<stdlib.h>
#include <time.h> 
#include <string.h> 
# define arithmos 1000  
struct node{
int value;
struct node *next;
};
struct student{
      int AM;
      char *FName;
      char *LName;
      int Year;
      struct student *next;
};    
  
struct studphone{
      int AM;
      int *phoneNumber;
      struct studphone *next;
};       

struct list{
struct student *head;
int elements;
};
struct Newlist{
struct studphone *head;
int number;
};
void displayList(struct list *L);
int insertAtHead(struct list *L, int AM, int Year, char Last[11], char First[11]){
struct student *stud; 
stud =(struct student*) malloc(sizeof(struct student));
   if( stud==NULL)
      { 
            printf("Error\n");
            return 0;
      }   
if (L->head==NULL){		
	L->head=stud;
       stud->next=NULL;
       stud->Year=Year;
       (*stud).AM=AM;
       stud->LName=Last;
       stud->FName=First;
}
else{
	stud->next=L->head;
	L->head=stud;
	stud->Year=Year;
       (*stud).AM=AM;
       stud->LName=Last;
       stud->FName=First;
}
   L->elements++;
return 1; 
}
int insertAtNewHead(struct Newlist *L, int MyAM, int MyPhoneNumber[11]){
struct studphone *stud; 
stud =(struct studphone*) malloc(sizeof(struct studphone));
   if( stud==NULL)
      { 
            printf("Error\n");
            return 0;
      }  
if (L->head==NULL){		
	L->head=stud;
       stud->next=NULL;
       (*stud).AM=MyAM;
       stud->phoneNumber=MyPhoneNumber;
}
else{
	stud->next=L->head;
	L->head=stud;
	(*stud).AM=MyAM;
       stud->phoneNumber=MyPhoneNumber;
}
   L->number++;
return 1; 
}
int deleteFromHead(struct list *L){
struct student *cur;
if(L->head==NULL)
	return 0;
cur=L->head;
L->head=L->head->next;
free(cur);
L->elements--;
printf("diagrafh enos stoixeiou.\n");
return 1;
}
int deleteAM(struct list *L, int wantedAM)
{ 
   struct student *cur, *previous;
   if(L->head==NULL)
        return -1;
    cur = L->head;
   if(cur->AM == wantedAM) 
     {
          printf("diagrafh 1ou stoixeiou. \n");    
          deleteFromHead(L); 
          return 1;   
      }   
   else
    {
       previous = cur;   
            cur = cur->next;
            
            while(cur!=NULL)
               { 
                  if(cur->AM ==wantedAM)
                      { 
                             free(cur);
                             previous->next = cur->next;
                             
                             return 1;
                      }
                     else
                     { 
                         previous = previous->next;
                         cur = cur->next;
                     }           
               } 
              return 0;  
     } 
} 
int findLastName(struct list *L, char *Last)
{  
   struct student *cur;
   int equal = 1;
   if(L->head==NULL)
     { printf("h lista einai adeia.\n"); return 0;
     }
    else cur = L->head; 
   while(cur!=NULL)
     { 
        if(strcoll(cur->LName,Last) == 0)
           { printf("vre8hke foithths me to onoma %s. o AM einai %d.\n",cur->LName, cur->AM);
           return cur->AM;}
          else 
        cur = cur->next;
     }
    printf("den vre8hke foithths me auto to teleutaio onoma.\n");
    return -1; 
}
void initlist(struct list *L){
L->head=NULL;
L->elements=0;
}

void initnewlist(struct Newlist *L){
L->head=NULL;
L->number=0;
}
void displayList(struct list *L){
struct student *cur;
cur=(struct student*) malloc(sizeof(struct student));
cur=L->head;
for (int i =0; i < L->elements; i++)
  { 
        if(cur == NULL)
          break;    
       printf("DisplayList %d\n",cur->AM);
	cur=cur->next;
        }
} 
int main(void)
{
    FILE *stud, *phones, *newstud;
    int k = 0, g =0, tempyear = 0, myphone[10], hack =0;
    char firstname[11]=" ", lastname[11]=" ", randchar=' ';
    srand( (unsigned)time( NULL ) );
    if ((stud = fopen("studites.txt", "w"))==NULL) {
       printf("de mporei na anoiksei to arxeio.\n");
       exit(1);
       }  
       else
       {
            printf("to arxeio anoikse.\n");
            for(int i = 0; i < arithmos; i++)
            {
               for (k = 0; k<10; k++)
                  { 
                      randchar = (char) (rand()%26 + 'a');
                      firstname[k] = randchar; 
                      randchar = (char) (rand()%26 + 'A');
                      lastname[k] = randchar; 
                  } 
                  tempyear = rand()%18 + 1990;  
                   if(k!=9)
                    fprintf(stud, "\t%d\t%s\t%s\t%d\t\n",i,firstname,lastname,tempyear) ;       
                  else
                    fprintf(stud, "\t%d\t%s\t%s\t%d\t\n",i,firstname,lastname,tempyear) ; 
            }
              printf("File studites written.\n");
             fclose(stud);
     }    
        if ((phones = fopen("phonebase.txt", "w"))==NULL) {
       printf("de mporei na anoiksei to arxeio phones.\n");
       exit(1);
       }  
       else
       {
            printf("to arxeio phonebase anoikse.\n");
           for(int j = 0; j < arithmos; j++)
               {
                     fprintf(phones, "%d\t",j);  
                     for(int m = 0; m < 3; m++)
                       {
                            for(g = 0; g < 10; g++)
                            { 
                                  if(g%10 == 0 && g!=0) 
                                     fprintf(phones, "\t");
                                hack = myphone[g] = rand()%10;
                                fprintf(phones, "%d ", hack); 
                            }
                               fprintf(phones, "\t"); 
                       } 
                     fprintf(phones,"\n");
                }
             printf("to arxeio phonebase dhmiourgithike.\n");   
             fclose(phones);   
       }
      struct list *MyList;
      MyList=(struct list*) malloc(sizeof(struct list));
         initlist(MyList);
       if ((stud = fopen("studites.txt", "r"))==NULL)
          {
                 printf("de mporei na anoiksei to arxeio student.txt\n"); exit(1);
                 
          }     
       else
       {    
            struct student *tempstud;
            tempstud=(struct student*) malloc(sizeof(struct student));
         int eggrafes = 0, myAM, myYear;
         char myFName[11], myLName[11], nameexists[11];
           while(!feof(stud) && eggrafes < arithmos)
            {
                  eggrafes++;           
                   fscanf(stud, "%d %s %s %d", &myAM, &myFName, myLName, myYear);
                insertAtHead(MyList, myAM, myYear, myLName, myFName);
            }
         printf("ta dedomena apo to arxeio student \"fortothikan\" sthn struct.\n");
       }
       struct Newlist *PhoneList;
      PhoneList=(struct Newlist*) malloc(sizeof(struct Newlist));
         initnewlist(PhoneList);
       if ((phones = fopen("phonebase.txt", "r"))==NULL)
          {
                 printf("de mporei na anoiksei to arxeio phones.txt\n"); exit(1);
                 
          }     
       else
       {    
            struct studphone *tempphone;
            tempphone=(struct studphone*) malloc(sizeof(struct studphone));
            if(tempphone==NULL)
              { printf("h mnimi den eparkei . exit \n"); return 0;}
           while(!feof(phones))
            {
                 fscanf(phones, "%d", &tempphone->AM); 
              for(k = 0; k < 3; k++)
             {  
                 for( g = 0; g < 10; g++)
                    {
                        if(g%10 == 0 && g!=0)
                       fscanf(phones, "%d", &tempphone->phoneNumber[g]);
                   }    
            }         
                 int success = 0;
                 if( success = insertAtNewHead(PhoneList, tempphone->AM,tempphone->phoneNumber) == 1)
                   { 
                               ;
                   }     
            }
         printf("ta dedomena apo to arxeio phonebase \"fortothikan\" sthn struct.\n");
       }
         printf("dwse to AM pros diagrafh: \n");
         scanf("%d",&k);
         if(deleteAM(MyList, k)==1)
            printf("o foithths me auto to AM diagrafhke.\n");
         else
            printf("de vrethike foithths me auto to AM.\n");   
         for (k = 0; k < arithmos; k++)
         {  if( k%10 == 0)
                deleteAM(MyList, k);
         }
         printf("\n dokimazoume ena onoma pou den uparxei:");
         findLastName(MyList, "aaa");
         printf("dokimazoume ena onoma pou uparxei.\n");
         int myAM, myYear; 
         char myFName[11], myLName[11];
         fscanf(stud, "%d %s %s %d", &myAM, &myFName, myLName, myYear);
         printf(" Name is %s",myLName);
         findLastName(MyList, myLName);
         fclose(stud);
	  printf("to arxeio stud ekleise.\n");
         fclose(phones);
         printf("to arxeio phones ekleise.\n");
       system("pause");
     return 0;  
}

εδω ειναι και η εκφωνηση της ασκησης 5

>
Θεματολογία: Λίστες -Στοίβες
ΜΕΡΟΣ 1
α) Υλοποιήστε τη δομή απλά συνδεδεμένης λίστας.
β) Υλοποιήστε τη δομή στοίβας χρησιμοποιώντας απλά συνδεδεμένη λίστα.
γ) Για να ελέγξετε τη λειτουργία της στοίβας τρέξτε την εφαρμογή της μετατροπής δεκαδικού σε δυαδικό με την καινούργια υλοποίηση της στοίβας.
ΜΕΡΟΣ 2
Φτιάξετε την ακόλουθη εφαρμογή. Δημιουργήστε σε αρχείο 1000 Φοιτητές(ΑΜ, όνομα, επμο, έτος_εγγραφής). Τα ΑΜ θα είναι διαδοχικά (1, 2, 3, κλπ.), το όνομα και το επμο θα είναι random char[10] και το έτος random από 1990-2007. Δημιουργήστε σε αρχείο 3000 εγγραφές Τηλνα(ΑΜ, αριθμός_τηλ) και βάλτε κάθε φοιτητή να έχει 3 τηλέφωνα (τυχαίοι int[10]). Φορτώστε τους φοιτητές και τα τηλνα σε δύο ξεχωριστές απλά συνδεδεμένες λίστες. Απαντήστε στα ακόλουθα ερωτήματα.
- Σβήστε από τις δομές τις εγγραφές των φοιτητών και τηλ/νων που αντιστοιχούν σε ΑΜ που είναι πολλαπλάσια του 10. 
- Βρες τα τηλνα του φοιτητή με επμο=..(κάποιο επμο που υπάρχει και κάποιο που δεν υπάρχει)
- Βρες τα τηλνα των φοιτητών με έτος εγγραφής 2006

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

15 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

ευχαριστω φιλε μου!ειχα 4 warnings,τωρα εχω 3!εξακολουθει ομως να εχει "σφαλμα" κατα

την εκτελεση του!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Εγώ που το έτρεξα σε DEV C++, δούλεψε κανονικά χωρίς κανένα warning (όπως και το compile)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

εμενα στη "Microsoft Visual C++ 6.0" οταν το εκτελω στην αρχη δειχνει ενταξει,μετα ομως βγαζει σφαλμα μνημης!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

ευχαριστω παρα πολυ bokarinho!

με εχεις βοηθησει πολυ αν και δεν εισαι υποχρεωμενος!

ευχαριστω και σενα και τα υπολοιπα παιδια!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ποια ακριβώς είναι τα warnings που έχεις. Μπορείς να τα δώσεις εδώ;

Επίσης, που σου πετάει το σφάλμα μνήμης (Μπορούμε να έχουμε ένα screenshot από το console output; )

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
>
#include <stdio.h>
#include <string.h>
#include <time.h>

#define TEL 3

typedef struct _Student
{
int AM;
char *name;
char *surname;
int Registr_Year;
}Student;

typedef struct _Telephone
{
int *telephoneNumbers;
int AM;
}Telephone;

/* My perror function. */

void _perror(const char *msg)
{
printf("%s\n", (msg == NULL) ? "UNKNOWN MESSAGE.\n" : msg);
}

/* Create A Random String. */

char *strRandom(int nrChars)
{
char *strRnd = NULL;
if((strRnd = malloc((nrChars+1) * sizeof(char))) == NULL)
{
	_perror("MEMORY FAILURE.");
	return NULL;
}
else
{
	int i;
	/* Alphabet. */
	static const char *AB = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for(i = 0; i < nrChars; i++)
		strRnd[i] = AB[rand() % (strlen(AB)-1)];
	strRnd[i] = '\0';
	/* Return. */
	return strRnd;
}
}

int RndYear(int StartYear, int FinishYear)
{
return FinishYear > StartYear ? (rand() % (FinishYear - StartYear + 1)) + StartYear : -1;
}

/* Create a file with random records in it. */

int CreateFileRMRec(const char *filename, int nrRecords, Student **studs)
{
if(!filename)
{
	_perror("INVALID_FILENAME.");
	return -1;
}
else
{
	/* File. */
	FILE *outsreamPtr = NULL;

	/* Students. */
	Student *nrStuds = NULL;

	/* Other. */
	int i;

	if((outsreamPtr = fopen(filename, "wt")) == NULL)
	{
		_perror("FILE FAILURE.");
		return -2;
	}
	else
	{
		if((nrStuds = calloc(nrRecords, sizeof(Student))) == NULL)
		{
			_perror("MEMORY_FAULT.");
			return -3;
		}
		else
		{
			for(i = 0; i < nrRecords; i++)
			{
				nrStuds[i].AM = i+1;
				nrStuds[i].Registr_Year = RndYear(1990, 2007);
				nrStuds[i].name = strRandom(10);
				nrStuds[i].surname = strRandom(10);
				if(!fprintf(outsreamPtr,"%d %s %s %d\n", nrStuds[i].AM, nrStuds[i].name, nrStuds[i].surname, nrStuds[i].Registr_Year))
				{
					_perror("WRITE FAILURE.");
					break;
				} 
			}
			/* Return the structures. */
			if(i == nrRecords)
			{
				*studs = nrStuds;

				/* Close file. */
				fclose(outsreamPtr);

				/* Return. */
				return 0;
			}
			else
			{
				for(; i >= 0; i--)
				{
					if(nrStuds[i].name)
						free(nrStuds[i].name);
					if(nrStuds[i].surname)
						free(nrStuds[i].surname);
				}
				free(nrStuds); nrStuds = NULL;
				*studs = NULL;
				fclose(outsreamPtr);
				return -1;
			}
		}
	}
}
}

int CreateFileRMRecTel(const char *filename, int nrRecords, Telephone **phones)
{
if(!filename)
{
	_perror("INVALID_FILENAME.");
	return -1;
}
else
{
	/* File. */
	FILE *outsreamPtr = NULL;

	/* Students. */
	Telephone *nrTels = NULL;

	/* Other. */
	int i,j;

	if((outsreamPtr = fopen(filename, "wt")) == NULL)
	{
		_perror("FILE FAILURE.");
		return -2;
	}
	else
	{
		if((nrTels = calloc(nrRecords, sizeof(Telephone))) == NULL)
		{
			_perror("MEMORY_FAULT.");
			return -3;
		}
		else
		{
			for(i = 0; i < nrRecords; i++)
			{
				nrTels[i].AM = i+1;
				if((nrTels[i].telephoneNumbers = calloc(TEL, sizeof(int))) == NULL)
					break;
				else
				{
					for(j = 0; j < TEL; j++)
						nrTels[i].telephoneNumbers[j] = RndYear(6941234, 6971234);
					/* Save to file. */
					fprintf(outsreamPtr,"%d\t%d %d %d\n", nrTels[i].AM, nrTels[i].telephoneNumbers[j++ % TEL],nrTels[i].telephoneNumbers[j++ % TEL],nrTels[i].telephoneNumbers[j++ % TEL] );
				}
			}

			if(i == nrRecords)
			{
				/* Return the structure. */
				*phones = nrTels;
				/* Close File. */
				fclose(outsreamPtr);
				/* Return. */
				return 0;
			}
			else
			{
				for(; i >= 0; i--)
					free(nrTels[i].telephoneNumbers);
				free(nrTels); nrTels = NULL;
				*phones = NULL;
				fclose(outsreamPtr);
				return -1;
			}
		}
	}
}
}

int main(int argc, char **argv)
{
Telephone *ph = NULL;
Student *std = NULL;
srand(time(NULL));
CreateFileRMRecTel("telephones.txt", 3000, &ph);
CreateFileRMRec("students.txt", 1000, &std);
return 0;
}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
καταφερα να τα διορθωσω τα warnings.μου βγαζει ακομα το σφαλμα!σας δινω την εικονα!!

 

Είσαι σίγουρος πως διόρθωσες τις fscanf; Γιατί εκεί πετούσε σφάλμα με τη λάθος εκδοχή τους.

Αν τις διόρθωσες, τότε δοκιμασε κάποιο debugging για να δεις ακριβώς σε ποιο σημείο του προγράμματός σου δημιουργείται το σφάλμα μνήμης.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Στην 5η άσκηση και επι του κώδικα που έχεις δώσει:

Στη C οι δηλώσεις μεταβλητών δεν γίνονται μέσα στα for loops. Οπότε όπου έχεις (γραμμές 161, 182, 207, 210)

>
for(int i = 0; κλπ κλπ) 
for(int j = 0; κλπ κλπ)
for(int m = 0; κλπ κλπ)

Οι δηλώσεις και αρχικοποιήσεις των i, j και m θα πρέπει να μπουν μαζί με τις αρχικοποιήσεις των υπόλοιπων μεταβλητών (στην αρχή του κώδικα της κάθε συνάρτησης), και τα αντίστοιχα for loop να γίνουν:

>
for(i = 0; κλπ κλπ) 
for(j = 0; κλπ κλπ)
for(m = 0; κλπ κλπ)

 

Επίσης (και το πιο βασικό) η fscanf (γραμμή 243 και 296) που δίνεις είναι λάθος:

>fscanf(stud, "%d %s %s %d", &myAM, &myFName, myLName, myYear);

Tο σωστό θα ήταν:

>fscanf(stud, "%d %s %s %d", &myAM, myFName, myLName, &myYear);

(γιατί τα myFName, myLName είναι ήδη pointers (σε char), και τα myAM, myYear είναι int μεταβλητές).

 

P.S. Δεν έχω ελέγξει τον κώδικα ως προς το λειτουργικό του κομμάτι (δηλαδή αν κάνει αυτό που του ζητάει η άσκηση). Απλά παρατήρησα αυτά τα λάθη στον κώδικα αυτόν καθαυτό.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

η προθεσμια ηταν μεχρι το βραδυ αλλα θελω να την κανω για να καταλαβω πως δουλευουν

τα δυαδικα δεντρα αναζητησης.το κακο ειναι οτι τα παιδια που εχουμε μαζι την εργασια

δεν ειναι απο αθηνα και δε τους πολυνοιαζει τωρα πια το μαθημα και εχω μεινει μονος μου!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Εντάξει απλά προσπαθούμε να βοηθήσουμε, η εργασία αυτή για τι σχολή είναι; Τα δυαδικά δέντρα αναζήτησης δεν ειναι τίποτα το ιδιαίτερο αρκεί να δώσεις λίγο βάση, ίσως να γράψω κάτι σχετικό με τα δυαδικά δέντρα αναζήτησης αργότερα.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Το παρακάτω πρόγραμμα εκτελεί 2 λειτουργίες, αρχικά γράφει σε ένα αρχείο κειμένου nrRecords εγγραφές οι οποίες έχουν μία συγκεκριμένη δομή και οι οποίες αποτελούνται από ένα αύξοντα αριθμό ΑΜ, ένα όνομα, ένα επώνυμο και ένα χρόνο που δηλώνει το χρόνο φοίτησης. Επίσης μέσω της επίμαχης συνάρτησης επιστρέφεται και ο πίνακας δομών με τις δομές που γράφτηκαν στο αρχείο για να μπορείς χωρίς να φτιάξεις άλλη συνάρτηση που να διαβάζει από αρχείο να τις έχεις έτοιμες. Βέβαια το να φτιάξεις μία συνάρτηση που να διαβάζει από ένα αρχείο είναι ιδιαίτερα απλό. Χρησιμοποιήσε το πρόγραμμα μου για να εισάγεις τα δεδομένα στις λίστες σου με ανάλογο τρόπο για την κάθε μία, δεν πιστεύω να σκέφτηκε επ ουδενί να έγγραφες με το χέρι 3000 τυχαίες και, εγγραφές.

 

>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct _Student
{
int AM;
char *name;
char *surname;
int Registr_Year;
}Student;

/* My perror function. */

void _perror(const char *msg)
{
printf("%s\n", (msg == NULL) ? "UNKNOWN MESSAGE.\n" : msg);
}

/* Create A Random String. */

char *strRandom(int nrChars)
{
char *strRnd = NULL;
if((strRnd = malloc((nrChars+1) * sizeof(char))) == NULL)
{
	_perror("MEMORY FAILURE.");
	return NULL;
}
else
{
	int i;
	/* Alphabet. */
	static const char *AB = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for(i = 0; i < nrChars; i++)
		strRnd[i] = AB[rand() % (strlen(AB)-1)];
	strRnd[i] = '\0';
	/* Return. */
	return strRnd;
}
}

int RndYear(int StartYear, int FinishYear)
{
return FinishYear > StartYear ? (rand() % (FinishYear - StartYear)) + StartYear : -1;
}


/* Create a file with random records in it. */

int CreateFileRMRec(const char *filename, int nrRecords, Student **studs)
{
if(!filename)
{
	_perror("INVALID_FILENAME.");
	return -1;
}
else
{
	/* File. */
	FILE *outsreamPtr = NULL;

	/* Students. */
	Student *nrStuds = NULL;

	/* Other. */
	int i;

	if((outsreamPtr = fopen(filename, "wt")) == NULL)
	{
		_perror("FILE FAILURE.");
		return -2;
	}
	else
	{
		if((nrStuds = calloc(nrRecords, sizeof(Student))) == NULL)
		{
			_perror("MEMORY_FAULT.");
			return -3;
		}
		else
		{
			for(i = 0; i < nrRecords; i++)
			{
				nrStuds[i].AM = i+1;
				nrStuds[i].Registr_Year = RndYear(1990, 2007);
				nrStuds[i].name = strRandom(10);
				nrStuds[i].surname = strRandom(10);
				if(!fprintf(outsreamPtr,"%d %s %s %d\n", nrStuds[i].AM, nrStuds[i].name, nrStuds[i].surname, nrStuds[i].Registr_Year))
				{
					_perror("WRITE FAILURE.");
					break;
				}
			}

			/* Return the structures. */
			*studs = nrStuds;

			/* Close file. */
			fclose(outsreamPtr);

			/* Return. */
			return 0;
		}
	}
}
}

int main(int argc, char *argv[])
{
Student *recs = NULL;
srand(time(NULL));
CreateFileRMRec("records.txt", 1000, &recs);
return 0;
}

 

Φιλικά Bokarinho,

Καλή συνέχεια.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...