Η σελίδα μας αναβαθμίστηκε, γι' αυτό τον λόγο τα μέλη μας θα πρέπει να ζητήσουν νέο κωδικό πρόσβασης από την υπηρεσία "Αποστολή κωδικού πρόσβασης".
Εάν το email με τον νέο κωδικό δεν έρθει στο inbox κοιτάξτε και στο spam folder. Ο server είναι φρέσκος και δεν έχει το reputation που του αξίζει.

Τεχνική εξομάλυνσης ( smοothing ) Γραμμικής Παρεμβολής σε C

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
John B
Δημοσιεύσεις: 6
Εγγραφή: 20 Μάιος 2006 02:37

Τεχνική εξομάλυνσης ( smοothing ) Γραμμικής Παρεμβολής σε C

Δημοσίευση από John B » 20 Μάιος 2006 02:53

Καλησπέρα σας,

Είμαι ένα νέο μέλος του forum καθώς και νέος χρήστης της γλώσσας C.

Έχω κολλήσει σε ένα θεματάκι και θα σας παρακαλούσα αν έχετε την καλοσύνη και την διάθεση να με βοηθήσετε.

Τα ερωτήματα μου είναι τα εξής και έχουν να κάνουν με την τεχνική εξομάλυνσης Γραμμικής Παρεμβολής ( παρεμβολή ανάμεσα σε οποιεσδήποτε δύο διαδοχικές τιμές μιας τρίτης νέας τιμής που είναι αριθμητικά ενδιάμεση από τις τιμές εκατέρωθέν της ).

Πως μπορώ να ορίσω σε γλώσσα C τα εξής:

α) έναν τύπο δεδομένων ο οποίος να αναπαριστά τους κόμβους μιας απλά συνδεδεμένης λίστας πραγματικών αριθμών και

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


Σας ευχαριστώ εκ των προτέρων για την βοήθεια σας.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Τεχνική εξομάλυνσης ( smοothing ) Γραμμικής Παρεμβολής σε C

Δημοσίευση από dva_dev » 20 Μάιος 2006 14:45

Θα πρέπει να πάρεις κάποιο βιβλίο (ή ebook) για δομές δεδομένων, θα σε βοηθήσει πολύ περισσότερο από το να λύσεις τέτοια προβλήματα.
Επίσης θα σου είναι πολύ χρήσιμο να ξεσκονίσεις τα αγγλικά σου. Θα βρείς πολύ περισσότερα (και ίσως καλύτερα) βιβλία στα αγγλικά παρά στα ελληνικά. Για ξεκίνημα θα σου πρότεινα το "Προγραμματισμός και δομές δεδομένων στην C".

α) Μια απλή υλοποίηση σε C (αν έχεις δυνατότητα να χρησιμοποιήσεις C++ ακόμα καλύτερα).

Κώδικας: Επιλογή όλων

struct listNode {
    float nodeValue;
    struct listNode *nextNode;
}
b)

Κώδικας: Επιλογή όλων

/*Θα δημιουργήσει και θα εισάγει τον νέο κόμβο μετά τον κόμβο που περνάμε σαν παράμετρο*/
/*Αν κάτι πάει στραβά επιστρέφει 0, αλλιώς 1.*/
int insertNode(struct listNode *thisNode, float newValue)
{
	struct listNode *newNode;
	newNode = (struct listNode*)malloc(sizeof (struct listNode));
	if (newNode == NULL)
		return 0;	/*Δεν μπόρεσε να δεσμεύσει μνήμη για να δημιουργήσει τον νέο κόμβο.*/

	newNode->nodeValue = newValue;
	/*Κάνουμε την παρεμβολή του νέου κόμβου*/
	newNode->nextNode = thisNode->nextNode;
	thisNode->nextNode = newNode;

	return 1;
}

/*Κάνει ένα πέρασμα σε όλη τη λίστα (εισάγωντας και τους αντίστοιχους κόμβους)*/
/*Παίρνει σαν παράμετρο τον πρώτο κόμβο της λίστας.*/
/*Αν κάτι πάει στραβά επιστρέφει 0 (σταματώντας στο σημείο που στράβωσε η διαδικασία), αλλιώς 1.*/
int visitList(struct listNode *firstNode)
{
	struct listNode *thisNode;
	struct listNode *nextNode;
	float medianValue;
	int returnValue;
	
	returnValue = 1;	/*OK*/

	if (firstNode == NULL)
		return returnValue;	/*Δεν υπάρχουν στοιχεία στη λίστα (δεν μπορεί να γίνει τίποτα).*/

	thisNode = firstNode;
	nextNode = thisNode->nextNode;
	while (nextNode != NULL)	/*Για να προχωρήσουμε πρέπει να υπάρχει και επόμενο στοιχείο*/
	{
		medianValue = (thisNode->nodeValue + nextNode->nodeValue) / 2;
		if (insertNode(thisNode, medianValue) == 0)
		{
			/*Αν κάτι πήγε στραβά στην εισαγωγή, είναι προτιμότερο να σταματήσουμε.*/
			returnValue = 0;
			break;	/*Αν δεν θέλεις να σταματήσει σβήνεις αυτή τη γραμμή.*/
		}

		/*Πάμε στο επόμενο στοιχείο της λίστας*/
		thisNode = nextNode;
		nextNode = thisNode->nextNode;
	}

	return returnValue;
}

我希望它不看起來漢語對您. :D

John B
Δημοσιεύσεις: 6
Εγγραφή: 20 Μάιος 2006 02:37

Τεχνική εξομάλυνσης ( smοothing ) Γραμμικής Παρεμβολής σε C

Δημοσίευση από John B » 20 Μάιος 2006 15:10

Καλησπέρα,

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

Θα προσπαθήσω να βρώ το βιβλίο που μου πρότεινες και να το μελετήσω.

Και πάλι ένα μεγάλο ευχαριστώ, να είσαι καλά.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες