Κύρια σελίδα

Κύρια σελίδα

Συνάρτηση swap με τρία ορίσματα (όπως στις εξετάσεις)

void swap(int *i, int *j, int *k){
/*Μεταφέρει τις τιμές ως εξής: i->j, j->k, k->i */
int temp;
temp = *i; *i = *k; *k = *j; *j = temp; return; }

Ασκήσεις προετοιμασίας (09-12-2011)
Τα στοιχεία που θα δέχεται ο πίνακας τι θα είναι αριθμοί, λέξεις, χαρακτήρες ή από όλα;

Αριθμοί ακέραιοι ή πραγματικοί, ό,τι θέλετε.


Πού μπορώ να δω την συνάρτηση random

<stdlib.h>

int rand(void);

Επιστρέφει ψευδοτυχαίους αριθμούς στο διάστημα 0 - RAND_MAX. Χρησιμοποιήστε το modulo % για να πάρετε το υπόλοιπο της διαίρεσης (π.χ. rand() % 10 θα επιστρέψει μια τιμή στο διάστημα 0-9)
void srand((unsigned) int seed);
Χρησιμοποιεί το seed ως φύτρο για μια νέα ακολουθία ψευδοτυχαίων αιρθμών. Το αρχικό φύτρο είναι το 1. Εάν θέλετε να μην εμφανίζετε κάθε φορά η ίδια ακολουθία ψεδοτυχαίων αριθμών στην αρχή του προγράμματος σας μπορείτε να κάνετε μια κλήση της μορφής

srand( (unsigned) time(NULL));
Η κλήση αυτή χρειάζεται μια φορά στην αρχή όχι κάθε φορά που εκτελείται η rand(). Η time() βρίσκεται στη βιβλιοθήκη <time.h>

Πρόβλημα με την ανάγνωση των διαφανειών.

Οι διαφάνειες θα αναρτώνται σε μορφή pdf για να ξεπεραστούν προβλήματα αναγνωσιμότητας γραμματοσειρών.

Στην άσκηση 3 το πρόγραμμα που δημιούργησα υπολογίζει μέχρι και το παραγοντικό του 16.Μετά το 16 αρχίζει και κάνει λάθη στις πράξεις,είτε δεν διαβάζει τους αριθμούς που δόθηκαν.Γιατί συμβαίνει αυτό;
Θα πρέπει να προσέξετε τα όρια των αριθμητικών τύπων που χρησιμοποιείτε. Το παραγοντικό αυξάνει γρήγορα: 1! =1 2! = 2 3! = 6 4! = 24 ... 10! = 3628800 15! = 1307674368000

Φαντάζομαι ότι χρησιμοποιείς long, οπότε λογικά -2.147.483.647 μέχρι 2.147.483.647 αν και σε κάποιους νέους υπολογιστές 64-bit τα όρια είναι -9.223.372.036.854.775.807 μέχρι 9.223.372.036.854.775.807 (τύπος long long int)

Ακόμα και με την χρήση της unsigned long οι αριθμοί πέραν του 12 δίνουν λανθασμένα αποτελέσματα, και έτσι αναγκάζομαι να οριοθετώ την άσκηση μεταξύ 0 και 12.Πως μπορώ να ξεπεράσω το πρόβλημα αυτό?
Δεν υπάρχει απλός τρόπος με τις γνώσεις που διαθέτετε αυτή τη στιγμή. Θα έπρεπε να φτιάξετε δικούς σας τύπους μεταβλητών και αντίστοιχες πράξεις.

Έστω πίνακας θετικών ακεραίων array ο οποίος έχει αρχικοποιηθεί με -1 σε όλες τις θέσεις του και στον οποίο φροντίζουμε ώστε να εισάγουμε στοιχεία στις πρώτες θέσεις χωρίς να αφήνουμε κενά (ώστε όταν βρίσκουμε το πρώτο -1 γνωρίζουμε ότι φτάσαμε στο τέλος του πίνακα). Να γραφεί συνάρτηση η οποία θα δέχεται ως όρισμα τον πίνακα ακεραίων array και θα επιστρέφει τη θέση που βρέθηκε το μεγαλύτερο στοιχείο του πίνακα.
''ΕΡΩΤΗΣΗ: Εφόσον θα βάλω σε όλες τις θέσεις -1, όλος ο πίνακας θα είναι γεμάτος με -1. Κι όταν θα γεμίζω τον πίνακα θα του αλλάξω τιμές. Όταν βρώ το πρώτο -1, πώς θα ξέρω πως έφτασα στο τέλος του πίνακα; Αφού και από την πρώτη κιόλας θέση, -1 θα βρω.'' Έστω ότι ο πίνακας έχει μέγεθος 5. Θέτουμε όλες τις θέσεις -1. {-1, -1, -1, -1, -1}. Την πρώτη φορά που θα εισάγουμε στοιχείο π.χ το 2 θα διατρέξουμε τον πίνακα μέχρι να βρούμε το πρώτο -1 (που βρίσκεται στη θέση 0). Ο πίνακας θα γίνει {2, -1, -1, -1, -1}. Τη δεύτερη φορά που θα εισάγουμε στοιχείο π.χ το 7 θα διατρέξουμε τον πίνακα μέχρι να βρούμε το πρώτο -1 (που βρίσκεται στη θέση 1). Ο πίνακας θα γίνει {2, 7, -1, -1, -1}. Αυτό που πρέπει να φροντίζει κάποιος είναι όταν διαγράφει στοιχεία να μεταφέρει όλα τα στοιχεία ώστε να } τα κενά. Π.χ. στον πίνακα {2, 7, 5, 12, -1} αν διαγράψω το 7 δεν πρέπει απλά να θέσω -1 στη θέση του γιατί θα είναι σα να τερματίζει εκεί ο πίνακας, θα πρέπει να τα μεταφέρω όλα τα υπόλοιπα μετά το 7 στοιχεία μια θέση πιο μπροστά {2, 5, 12, -1, -1}