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

ανακατασκεύαζει τον πίνακα Α...

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

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

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

ανακατασκεύαζει τον πίνακα Α...

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

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

'Εχω γράψει το παρακάτω πρόγραμμα σε γλώσσα c αλλά κάτι μάλλον πρέπει να κάνω λάθος.

#include <stdio.h>
#define N 6
void main()

{
char A[N];
int romeo[256];
int i;
CHAR NEXT_CH;
CHAR CH;
for(i=0;i<N;i++)
{
printf("Dose xaraktira no%d:",i+1);
fflush(stdin);
scanf("%c",&A);
}
for(i=0;i<256;i++)
romeo=0;
for(i=0;i<N;i++)
romeo[A]++;
NEXT_CH=CH+1;
for(i=0;i<N;i++)
printf("A[%d]:%c\n",i+1,A);
}

Όπου με μικρά γράμματα είναι η βάση του κώδικα και με κεφαλαία μάλλον είναι ο κώδικας που προκαλεί το πρόβλημα.

Ο παραπάνω κώδικας πρέπει να ανακατασκεύαζει τον πίνακα Α χρησιμοποιώντας την αντιστοίχηση χαρακτήρων και εμφανίσεων. Στην αρχή ο Α θεωρείται κενός. Διατρέχοντας τον πίνακα romeo τοποθετούμε στην αρχή του πίνακα Α τόσους χαρακτήρες που αντιστοιχούν στην πρώτη θέση του πίνακα romeo όσο και η τιμή που είναι αποθηκευμέη στην πρώτη θέση του πίνακα romeo κλπ. Όταν διατρέξουμε με αυτόν τον τρόπο όλο τον πίνακα romeo ο πίνακας Α θα έχει ταξινομηθεί.

Παρακαλώ πολύ για τις παρατηρήσεις σας σε αυτό το πρόβλημα.

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

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

ανακατασκεύαζει τον πίνακα Α...

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

Η εντολή που έχεις γράψει με κεφαλαία ούτε έχει κάποιο λάθος ούτε προκαλεί κάτι στον κώδικα σε σχέση με αυτό που θέλεις να πάρεις (εκτός του ότι χρησιμοποιείς μή αρχικοποιημένες μεταβλητές). Είναι σαν να μην υπάρχουν - για αυτό που ζητάς.
Όταν διατρέξουμε με αυτόν τον τρόπο όλο τον πίνακα romeo ο πίνακας Α θα έχει ταξινομηθεί.
Θα έχει ταξινομηθεί ώς προς τι; Δεν βλέπω να κάνεις πουθενά ταξινόμηση, ούτε να διατρέχεις τον πίνακα romeo.

Αν θέλεις να μας δώσεις κάποια παραδείγματα του τι θα δίνεις σαν είσοδο και τι πρέπει να βγάζει σαν έξοδο...

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

ανακατασκεύαζει τον πίνακα Α...

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

Ευχαριστώ πάρα πολύ ( για άλλη μια φορά ) για τις παρατηρήσεις σου.

Το πρόγραμμα πρέπει να ταξινομεί τον πίνακα χαρακτήρων Α. Ο κώδικας χρησιμοποεί τον πίνακα romeo ο οποίος είναι τόσων θέσεων όσοι και οι υπάρχοντες χαρακτήρες ( θέσεις 256 ) και αρχικοποιεί όλα τα στοιχεία του στο 0.Στη συνέχεια μετράει τις εμφανίσεις του κάθε χαρακτήρα στον πίνακα Α.

Ο πίνακας romeo αντιστοιχίζει χαρακτήρες με εμφάνισεις χαρακτήρων.

Για παράδειγμα αν romeo['j']==9 o χαρακτήρας j εμφανίζεται 9 φορές στον πίνακα Α.

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

Για ακόμη μια φορά σας ευχαριστώ για την βοήθεια σας.

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

ανακατασκεύαζει τον πίνακα Α...

Δημοσίευση από dva_dev » 21 Μάιος 2006 01:04

Είδα ότι η ταξιμόνηση θέλεις να γίνεται με βάση το πλήθος εμφανίσεων, αλλά Αύξουσα ή φθίνουσα;
Αν κάποια στοιχεία έχουν το ίδιο πλήθος εμφανίσεων, τι γίνεται;

Αν δώσεις δηλαδή για είσοδο τους χαρακτήρες
1) A,B,A,B,C,C
2) A,A,A,A,A,A
3) F,E,D,C,B,A
4) A,B,C,C,C,Β

Tι αποτελέσματα θα πρέπει να δώσει σε κάθε περίπτωση;

Δες πάντως αν σου κάνει το παρακάτω (με όσο το δυνατόν λιγότερες αλλαγές στον κώδικα σου):

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

#include <stdio.h>

#define N 6

int main&#40;int argc,char**argv&#41;
&#123;
	char A&#91;N&#93;;
	int romeo&#91;256&#93;;
	int i;

	/*-----------------------------------------------------------*/
	/*Θα χρειαστούν για την ταξινόμηση*/
	int BB&#91;N&#93;;
	int nItems=0;
	int j;
	int tmp;
	char chtmp;
	/*-----------------------------------------------------------*/

	for&#40;i=0;i<N;i++&#41;
	&#123;
		printf&#40;"Dose xaraktira no%d&#58;",i+1&#41;;
		fflush&#40;stdin&#41;;
		scanf&#40;"%c",&A&#91;i&#93;&#41;;
	&#125;
	
	for&#40;i=0;i<256;i++&#41;
		romeo&#91;i&#93;=0;

	for&#40;i=0;i<N;i++&#41;
		romeo&#91;A&#91;i&#93;&#93;++;

	/*-----------------------------------------------------------*/
	for&#40;i=0;i<N;i++&#41;
	&#123;
		A&#91;i&#93;='\0';
		BB&#91;i&#93;=0;
	&#125;

	for &#40;i=0;i<256;i++&#41;
	&#123;
		if &#40;romeo&#91;i&#93;>0&#41;
		&#123;
			A&#91;nItems&#93;=&#40;char&#41;i;
			BB&#91;nItems++&#93;=romeo&#91;i&#93;;
		&#125;
	&#125;

	/*Ταξινομούμε τον A με βάση τον BB &#40;simple bb sort&#41; */
	for &#40;i=0; i<nItems-1;i++&#41;
		for &#40;j=i+1;j<nItems;j++&#41;
			if &#40;BB&#91;j&#93;<BB&#91;i&#93;&#41;&#123;
				tmp=BB&#91;j&#93;;  BB&#91;j&#93;=BB&#91;i&#93;; BB&#91;i&#93;=tmp;
				chtmp=A&#91;j&#93;; A&#91;j&#93;=A&#91;i&#93;;   A&#91;i&#93;=chtmp;
			&#125;
	/*-----------------------------------------------------------*/

	for&#40;i=0;i<nItems;i++&#41;
	&#123;
		printf&#40;"A&#91;%d&#93;&#58;%c\n",i+1,A&#91;i&#93;&#41;;
	&#125;
&#125;
Ελπίζω να βοήθησα

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

ανακατασκεύαζει τον πίνακα Α...

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

Για άλλη μια φορά η βοήθεια σου ήταν πολύτιμη.

Όπως είδες ο συγκεκριμένος κώδικας ήταν μόνο για μια απλή ταξινόμηση πλήθους εμφανίσεων.

Το προγραμματάκι που έφτιαξες ήταν άψογο για την συγκεκριμένη περίπτωση.

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

Υ.Σ. Μήπως έχεις κατά νου κανένα site ή e-book που να ασχολείται με το πρόβλημα
Hanoi Towers ( αρχικοποίηση πύργων , εισαγωγή , διαγραφή , μετακίνηση δίσκου ,
μετακίνηση πύργου και εκτύπωση πύργων ) σε γλώσσα C , αλλά να χρησιμοποιεί
αναδρομικό αλγόριθμο και οι 3 πύργοι θα πρέπει να αναπαρασταθούν με 3 στοίβες οι
οποίες θα υλοποιηθούν με χρήση ενός δυσδιάστατου πίνακα ;;;;;

Σε ευχαριστώ πάρα πολύ.

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

ανακατασκεύαζει τον πίνακα Α...

Δημοσίευση από dva_dev » 21 Μάιος 2006 16:17

Δοκίμασε να ξεκινήσεις από το http://hanoitower.mkolar.org/index.php και συνέχισε με το google.
:reading:

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

ανακατασκεύαζει τον πίνακα Α...

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

Καλησπέρα,

σε ευχαριστώ πάρα πολύ για το site που μου είπες.

Έχω ήδη ψάξει στο google και έχω βρει διάφορα αλλά δεν έχω βρεί ακριβώς αυτό που ψάχνω.

Το παραπάνω site δεν το είχα βρει και φαίνεται να είναι πολύ ενδιαφέρον οπότε το μόνο που μένει είναι ψάξιμο και φυσικά διάβασμα...........

Για άλλη μια φορά χίλια ευχαριστώ.

Απάντηση

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

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

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