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

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


BloodDonor89

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

  • Moderators

"εκτελουνται" με την σειρα, και σου επιστρεφει το τελευταιο.

 

Πχ τι εχουμε εδω;

int i = (1,2,3);

i = 3

 

 

Στο for, σε μία σύνταξη τύπου for (i = 0, j =0; i < 5, j < 6; i++, j++) δεν ελέγχονται και τα δύο σκέλη (δηλαδή και ότι i < 5 και j < 6); Νόμιζα ότι το ίδιο ισχύει και στη while

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

Στο for, σε μία σύνταξη τύπου for (i = 0, j =0; i < 5, j < 6; i++, j++) δεν ελέγχονται και τα δύο σκέλη (δηλαδή και ότι i < 5 και j < 6); Νόμιζα ότι το ίδιο ισχύει και στη while

 

Όχι, δεν ελέγχονται και τα 2... μόνο το j < 6 ελέγχεται (δεν σε κάλυψε το προηγούμενο ποστ μου; )

 

@ZAKKWYLDE: Σωστά!

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

  • Moderators

Όχι, δεν ελέγχονται και τα 2... μόνο το j < 6 ελέγχεται (δεν σε κάλυψε το προηγούμενο ποστ μου; )

 

@ZAKKWYLDE: Σωστά!

 

Το κατάλαβα το post σου, απλώς μέχρι τώρα πίστευα ότι ελέγχονται και οι 2 (κάπου θα το είχα ακούσει και θα μου έμεινε) και είπα να διπλοτσεκάρω. Ευχαριστώ :D

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

Το κατάλαβα το post σου, απλώς μέχρι τώρα πίστευα ότι ελέγχονται και οι 2 (κάπου θα το είχα ακούσει και θα μου έμεινε) και είπα να διπλοτσεκάρω. Ευχαριστώ :D

 

Παρακαλώ :)

 

Πάντως το παράδειγμα που δίνεις με τη for δεν χρησιμοποιείται πουθενά γιατί δεν έχει νόημα να μπουν boolean συνθήκες ως μη τελευταίοι όροι του τελεστή ,

 

Αυτό που θα δεις είναι να χρησιμοποιούνται αναθέσεις ως όροι του τελεστή ,

 

Γενικώς όμως, με κάποιες ιδιωματικές εξαιρέσεις (όπως π.χ. στο initialization part και στο incremental part της for) δεν θεωρείται καλή πρακτική η χρήση του τελεστή ,

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

while (prod *= i, i-- != 1);

Αν δεν κάνω λάθος το παραπάνω κάνει το εξής με τη σειρά:

 

1. υπολογίζει το prod*=1

2. υπολογίζει το i-- και το συγκρίνει με το 1

3. επιστρέφει τη τιμή της σύγκρισης για να δει αν θα συνεχίσει το loop.

 

 

Έχω την εντύπωση ότι πρώτα γίνεται σύγκριση με το 1 και μετά γίνεται μείωση του counter.

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

Έχω την εντύπωση ότι πρώτα γίνεται σύγκριση με το 1 και μετά γίνεται μείωση του counter.

 

Χμμμ νομίζω η αριθμητική προηγείται της λογικής...but you never know :P.

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

Χμμμ νομίζω η αριθμητική προηγείται της λογικής...but you never know :P.

 

Πρώτα γίνεται η σύγκριση και μετά η μείωση δες για παράδειγμα:

#include <stdio.h>

int main()
{
	int i = 10;

	while ( i-- != 10 ) 
		printf("into the looop\n");

	return 0;
}

Αν έκανε πρώτα την μείωση και μετά τη σύγκριση θα εκτύπωνε "for ever", ενώ τώρα βλέπει ότι δεν είναι διάφορο του 10 οπότε δεν μπαίνει καν μέσα...

 

Για να κάνεις πρώτα την μείωση και μετά τη σύγκριση θα χρησιμοποιήσεις τον

--i;

;)

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

Όσον αφορά το comma seperator διάβασα ότι μπορεί να κάνει και κάτι τέτοιο, αν και μάλλον δεν ενδείκνυται:

if (1 == sthng)
        a = 1, b = 2;

is like

if (1 == sthng) {
        a = 1;
        b = 2;
}

So we can omit the brackets as it was one expression
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Όσον αφορά το comma seperator διάβασα ότι μπορεί να κάνει και κάτι τέτοιο, αν και μάλλον δεν ενδείκνυται:

if (1 == sthng)
        a = 1, b = 2;

is like

if (1 == sthng) {
        a = 1;
        b = 2;
}

So we can omit the brackets as it was one expression

 

Ναι, φυσικά και γίνεται αλλά κυρίως χρησιμοποιείται όταν θέλεις να γραψεις compact κώδικα. Προσωπικά τον χρησιμοποιώ όταν έχω καποιο conditional if ή σε for για αύξηση παραπάνω από μίας μεταβλητής...

 

(περιτό να πω οτι χρησιμοποιείται κατα κόρον σε obfuscated code writing :P )

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

λέγοντας;...

 

Ίσως η λέξη compact να σε μπέρδεψε αλλα στην ουσία το παράδειγμα που ανέφερες λέω. Έχω δει να το χρησιμοποιούν είτε για ανάθεση τιμών σε παρόμοιες μεταβλητές είτε για αύξηση μετρητών (όπως και τις πολλαπλές αναθέσεις).

π.χ.

...
if ( ... )
   word_count++ , char_count++, line_count++ ;
else
   word_count = char_count = line_count = 0;
...

Όπως είπες δεν ενδείκνυται και προσωπικα όπως είπα το χρησιμοποιώ κυρίως σε for και σπανιότερα σε κανένα conitional if

for ( i = 0, counter = STARTING_POINT; i < MAX_ITERATIONS; i++, counter += STEP ) {
   ...
}

Και μια που ανέφερα τις πολλαπλές αναθέσεις... :P :p :P

#include <stdio.h>

main()
{
	int i , j ;

	...

	i -= (j = (i += j)- j);
	
	...

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

Όσον αφορά το comma seperator διάβασα ότι μπορεί να κάνει και κάτι τέτοιο, αν και μάλλον δεν ενδείκνυται:

if (1 == sthng)
        a = 1, b = 2;

is like

if (1 == sthng) {
        a = 1;
        b = 2;
}

 

 

Ε αν σκεφτείς ότι το μόνο που καταφέρνει είναι να αντικαταστήσει μερικά ερωτηματικά με κόμματα και ίσως να μπερδέψει τον κόσμο... δεν το λες και συνιστάται από 29 κατασκευαστές πλυντηρίων.

 

 

#include <stdio.h>

main()
{
	int i , j ;

	...

	i -= (j = (i += j)- j);
	
	...

	return 0;
}

 

Undefined behavior FTW?

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

Έχω την εντύπωση ότι πρώτα γίνεται σύγκριση με το 1 και μετά γίνεται μείωση του counter.

 

Σωστά! Για αυτόν ακριβώς τον λόγο είχα τοποθετήσει εκείνο το EDIT στο αρχικό μου ποστ.

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

Γεια σας,

 

Σπουδαζω  Μηχανικων Πληροφορικης και ο καθηγητης του μαθηματος μας εχει δωσει μια Ασκηση για το εξαμηνο...

Εχω εισαχθει στην σχολη απο Θεωρητικη κατευθυνση (καποια απο τα λαθη των πανελληνιων,που επιτρεπουν εισοδο σε τεχνολογικες σχολες απο θεωριτικη κατευθυνση) και οι γνωσεις μου ειναι περιορισμενες πανω στα μαθηματα,παρολο που μου αρεσει η Πληροφορικη...
 

Στο μαθημα του Προγραμματισμου I (1) μας εχει δοθει η εξης ασκηση:

Να γραφει προγραμμα σε pascal το οποιο : 1) να κατασκευαζει ενα αρχειο αυτου του τυπου με n στοιχεια 2) να διαγραφει την πρωτη εμφανιση του στοιχειου με μορφη x 3) να εισαγει στην πρωτη διαθεσιμη θεση το στοιχειο με τιμη y... *Τα 1,2,3 να γραφουν με την μορφη διαδικασιας... *** (με βαση αυτο τον τυπο: type myrec=record Value=integer Exists:boolean End; )

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

Ευχαριστω πολυ...!

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

Να γραφει προγραμμα σε pascal το οποιο : 1) να κατασκευαζει ενα αρχειο αυτου του τυπου με n στοιχεια 2) να διαγραφει την πρωτη εμφανιση του στοιχειου με μορφη x 3) να εισαγει στην πρωτη διαθεσιμη θεση το στοιχειο με τιμη y... *Τα 1,2,3 να γραφουν με την μορφη διαδικασιας... *** (με βαση αυτο τον τυπο: type myrec=record Value=integer Exists:boolean End; )

 

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

 

Ευχαριστω πολυ...![/size]

Καταρχήν μιλάς για pascal σε θέμα για C το οποίο δεν βοηθάει κάποιον που θα ψάχνει κάτι για την Pascal.

 

Κατά δεύτερον δεν συνηθίζεται να δίνεται έτοιμη λύση για άσκηση αλλά να προσπαθείς και αφού φτάσεις σε ένα αξιοπρεπές σημείο, να ποστάρεις τον κώδικα και να βοηθάμε στα λάθη που μπορεί να έχει. Μπορεί φυσικά να βρεθεί κάποιος να στην δώσει έτοιμη αλλά το πιο σίγουρο είναι να την προσπαθήσεις και μετά να σε βοηθήσουμε στο polishing

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

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

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

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

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

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

Σύνδεση

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

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