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

Εχω κολλησει σε μια ασκηση της C


BloodDonor89

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

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

 

Μια πολυκατοικία έχει 5 ορόφους και κάθε όροφος έχει 10 διαμερίσματα. Ο διαχειριστής της πολυκατοικίας θέλει να υπολογίσει τα κοινόχρηστα που πρέπει να πληρώσει κάθε διαμέρισμα. Το ποσοστό συμμετοχής κάθε διαμερίσματος στα συνολικά έξοδα προκύπτει με βάση τα τετραγωνικά του μέτρα προς την συνολική του επιφάνεια της πολυκατοικίας. Να γίνει πρόγραμμα σε C ήC++:
 
1. Το πρόγραμμα περιέχει πληροφορίες για κάθε διαμέρισμα: το όνομα του ιδιοκτήτη, τον αριθμό του διαμερίσματος και τα τετραγωνικά του μέτρα, καθώς και τον όροφο του κάθε διαμερίσματος.
2. Να υλοποιηθεί συνάρτηση που θα εμφανίζει τα συνολικά τετραγωνικά για κάθε όροφο.
3. Να υλοποιηθεί συνάρτηση που θα διαβάζει τα συνολικά χρήματα που πρέπει να πληρώσει η πολυκατοικία και για κάθε διαμέρισμα θα εμφανίζει το όνομα του ιδιοκτήτη και τα χρήματα που πρέπει να πληρώσει για το διαμέρισμα του.
4. Να υλοποιηθεί συνάρτηση που θα εμφανίζει το συνολικό χρηματικό ποσό που πρέπει να πληρώσει όποιο διαμέρισμα επιλεγεί βάσει της αρίθμησης των διαμερισμάτων (βάσει και του συνολικού ποσού του προηγούμενου ερωτήματος).
5. Να υλοποιηθεί συνάρτηση που για κάθε όροφο θα εμφανίζει το όνομα του ιδιοκτήτη με το μεγαλύτερο διαμέρισμα.
Παρατηρήσεις:
 
Οι παραπάνω επιλογές μπορούν να προσδιοριστούν από τον χρήστη του εκτελέσιμου του προγράμματός σας, με όποιον τρόπο σκεφτείτε. Για παράδειγμα, μπορούν οι παραπάνω επιλογές να «ενεργοποιούνται» με τη χρήση κάποιας αρίθμησης (π.χ. είσοδος 2 για το ερώτημα 2, 3 για το ερώτημα 3, κ.λπ.)
 Σας προτείνουμε να «καταχωρήσετε» τα δεδομένα σας και στη συνέχεια να «χτίσετε» το πρόγραμμά σας με τη χρήση δομών.
 Τα δεδομένα της πολυκατοικίας (όροφοι, διαμερίσματα, κ.λπ.) θα είναι καταχωρημένα εξ αρχής μέσα στο πρόγραμμά σας (μέσα στον κώδικά σας). Δεν θα διαβάζονται από κάποιο εξωτερικό αρχείο, ούτε θα τα πληκτρολογεί ο κάθε χρήστης τα δεδομένα.
 
 
σας ευχαριστω πολυ εκ των προτερων
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 57
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Καλημερα κι απο μενα. 

 

επανερχομαι με ενα προβλημα που δεν ξερω αν αφορα το κωδικα που εχω γραψει η τον compiler του dev C++

 

anyway.

 

Ο κωδικας που εχω γραψει ειναι αυτος:

#include <stdio.h>
int main (void)

{
	int x, S, count, count1;
	float MO;
	S=0;
	count=0;
	count1=0;
	printf("dwse tous arithmous");
	while (S<=1000)
	{
		scanf("%d", &x);
		count++;
		S=S+x;
		
		if (x%2==0)
		count1++;
	}
	MO=S/count;
	printf("to meso oro twn arithmwn einai %.3f\n", MO);
	printf("to plithos twn zygwn arithmwn einai %d", count1);
}

το προβλημα ειναι οτι εκει που αναφερω το μεσο ορο, δεν μου το εμφανιζει σωστα. πχ πληκτρολογω 1000 και 1, για να τελειωσει η επαναληψη. Αντι να βγαλει αποτελεσμα 500,5 στο μεσο ορο μου βγαζει 500.

 

Μετα το printf του μεσου ορου, εβαλα ενα printf για να δω αν η προσθεση γινεται σωστα.

 

οριστε και screenshot οταν τρεχει το προγραμμα.

B5Vo8zx.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλημέρα,

 

το πρόβλημα είναι στη γραμμή ...

MO = S / count;
Τα S και count είναι int που σημαίνει πως η διαίρεσή τους καταλήγει πάντα σε ακέραιο αποτέλεσμα (δλδ, χωρίς δεκαδικά ψηφία).

 

Για να σου δώσει σωστό float αποτέλεσμα η πράξη πρέπει ένα εκ των S και count να είναι δηλωμένα ως float. Εναλλακτικά, επειδή δεν έχει και πολύ νόημα να τα δηλώσεις ως float αυτά, μπορείς την ώρα που κάνεις την πράξη να κάνεις cast σε float ένα εκ των δυο αυτών μεταβλητών. Στο δείχνω με το sum...

MO = (float)S / count;
ΥΓ. Άσχετα με την ερώτησή σου, μερικές σημειώσεις:

 

1. Κατά σύμβαση, με κεφαλαία γράμματα ορίζουμε μόνο τις σταθερές (είτε στον προ-επεξεργαστή, είτε με const).

 

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

 

3. Ο μέσος όρος είναι αρσενικό, δεν είναι ουδέτερο ;)

 

EDIT:

 

Με πρόλαβε ο timon.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ωραια μου το εβγαλε σωστο τωρα. 

 

1. Αυτο ειναι η αληθεια δεν το ηξερα.

 

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

 

3. Απο κεκτημενη ταχυτητα το εχω γραψει ετσι :P

 

Σας ευχαριστω πολυ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

... 

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

...

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

#include <stdio.h>
int main( void )
{
	int num    = 0;		// stores an inputted int number during each loop iteration
	int sum    = 0;		// sum of all inputted numbers
	int count  = 0;		// counts inputted numbers
	int nevens = 0;		// counts inputted even numbers
	float avg  = 0.f;	// average of all inputted numbers

	printf("dwse tous arithmous:\n");
	while ( sum <= 1000 )
	{
		scanf( "%d", &num );
		count++;
		sum += num;

		if ( num % 2 == 0 )
			nevens++;
	}
	avg = (float)sum / count;
	printf( "Mesos oros: %.3f\n", avg );
	printf( "Plithos zygwn: %d\n", nevens );

	return 0;
}
Οι αγγλικές ονομασίες και τα σχόλια, κάνουν τη ζωή λίγο πιο εύκολη σε όσους ξένους χρειαστεί να διαβάσουν τον κώδικά σου (αν δηλαδή χρειαστεί, αλλιώς ας είναι στα ελληνικά).

 

Σας ευχαριστω πολυ.

Παρακαλούμε :)

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

 

Δεν είναι ανάγκη να ακούσεις κανέναν σε αυτό....

 

 

Απλά περίμενε την στιγμή που θα χάσεις ένα μάθημα και θα το ξαναδώσεις Σεπτέμβρη... και για αυτό το μάθημα θα πρέπει να ξανά-παραδώσεις με μικρές αλλαγές τον κώδικα που έχεις φτιάξει κάποιους μήνες πριν. 

 

Θα το πάθεις, θα τραβάς τα μαλλιά σου και θα μάθεις... δεν είναι τίποτα. Οι περισσότεροι έτσι μάθανε :P

 

Y.G. Η περίμενε την στιγμή που θα πρέπει να κάνεις debug σε κώδικα με καμία 5k γραμμές κώδικα. Είτε δικό σου είτε άλλου. Και θα πρέπει να θυμάσαι τι κάνει το "tmp_variable" σε κάθε function/method ξεχωριστά. Θα το πάθεις, θα τραβάς τα μαλλιά σου και θα μάθεις :P 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

χαχαχαχα ενταξει ενα μαθημα ειναι μωρεεεε :P

 

χμμμ μηπως ηρθε η ωρα να παρατησω τον προγραμματισμο; χαχαχα

 

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

 

Προσπαθω οσο μπορω να γινομαι καλυτερος μεσα απο ασκησεις, απο ψαξιμο στο ιντερνετ κτλ, γιατι ο προγραμματισμος περαν του οτι ειναι ενας τομεας που εχει ζήτηση, αλλα μ αρεσει κιολας, και το ψαχνω δεν μενω μονο σ αυτα που κανουμε στο ΤΕΙ.

 

Τουλαχιστον ειμαι σε καλο δρομο :P και το προσπαθω χεχε

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τι να σταματήσεις τον προγραμματισμό μωρέ; Καμία σχέση! Απλά όσο ασχολείσαι θα μάθεις να μην κάνεις πράγματα που δεν πρέπει να κάνεις επειδή αυτά που κάνεις σε δυσκολεύουν. 

 

Ο μόνος αντίπαλος στον κώδικα είναι η μνήμη και οι αδυναμίες/ελλείψεις του ανθρώπου και οι μεταξύ των ανθρώπων επικοινωνία. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 Επιστρέφω, αυτή την φορά όχι για κάποια απορία....αλλά να πω ένα αστείο περιστατικό που έγινε με αυτό:

 

 

 

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

 

στην εξεταστική λοιπόν, είχα σαν οδηγό κάποιες συμβουλές...και μέσα σ αυτές τις συμβουλές είχα αυτή του φίλου migf1.

 

Έβαλα λοιπόν πιο περιγραφικά ονόματα στις μεταβλητές, όπως sum, avg κι άλλα τέτοια.

 

Το ΣΚ μου στέλνει μήνυμα ο καθηγητής, και μου λέει, σίγουρα ήρθες εσύ και έγραψες; Μην έβαλες κανέναν άλλον; Πως το έπαθες και έβαλες περιγραφικά ονόματα;

 

Για την ιστορία να πω, ότι χάρη σ αυτό πήρα 10. Γιατί είχα κάνει κάποια μικρολάθακια (δεν γράφαμε σε υπολογιστή οπότε δεν υπήρχε και η δυνατότητα να το ελέγξω και να το διορθώσω).

 

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

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είναι αυτό που λένε... σου έγινε μάθημα!

Με την κυριολεκτική έννοια του όρου! :-D :-D :-D

 

Συγχαρητήρια για το δεκάρι. Πάντα τέτοια!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

...

 

 

Για την ιστορία να πω, ότι χάρη σ αυτό πήρα 10. Γιατί είχα κάνει κάποια μικρολάθακια (δεν γράφαμε σε υπολογιστή οπότε δεν υπήρχε και η δυνατότητα να το ελέγξω και να το διορθώσω).

 

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

 

Πραγματικά με χαροποίησε πολύ το μήνυμά σου! Συγχαρητήρια για το 10 και σε ευχαριστώ κι εγώ με τη σειρά μου για το προηγούμενο μήνυμά σου.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...