ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Διαδικασιακός Προγραμματισμός

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

scanf() scanf() stdin scanf() printf() int float double %lf float

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Ι (ΗΥ120)

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Σημειώσεις για πρόοδο στο εργαστήριο

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; }

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Μεθόδων Επίλυσης Προβλημάτων

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ.

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι (ΗΥ120)

1 Ο ΣΕΤ ΑΣΚΗΣΕΩΝ (Ενδεικτικές Λύσεις)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

3 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΠΙΝΑΚΕΣ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

12. Συναρτήσεις (Μέρος ΙI)

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Διαδικασιακός Προγραμματισμός

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

3 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΠΙΝΑΚΕΣ

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

Λυμένα παραδείγματα με τις for, while, do-while

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

C: Από τη Θεωρία στην Εφαρμογή

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον δομημένο προγραμματισμό

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Δομημένος Προγραμματισμός (ΤΛ1006)

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εργαστηριακή Άσκηση 1

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

ΕΠΛ 034 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΗΜΥ

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Η γλώσσα προγραμματισμού C

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Διάλεξη 8η: Αλφαριθμητικά (strings)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στον Προγραμματισμό

Υπολογισμός - Εντολές Ελέγχου

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Εισαγωγή στον Προγραμματισμό

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

Προγραμματισμός Η/Υ (ΤΛ2007 )

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

Η γλώσσα προγραμματισμού C

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Γλώσσα Προγραμματισμού C

3 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΠΙΝΑΚΕΣ

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Η γλώσσα προγραμματισμού C

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Η γλώσσα προγραμματισμού C

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ (2009-2010) ΥΠΕΥΘΥΝΟΙ ΔΙΔΑΣΚΟΝΤΕΣ ΕΡΓΑΣΤΗΡΙΟΥ: Α. ΦΩΚΑ, Κ. ΣΤΑΜΟΣ 3 Ο ΣΕΤ ΑΣΚΗΣΕΩΝ

Οι ασκήσεις αυτού του φυλλαδίου καλύπτουν τα παρακάτω θέματα και δίνονται ενδεικτικά οι αντίστοιχες ενότητες στο βιβλίο The GNU C Programming Tutorial που μπορείτε συμβουλευτείτε (http://crasseux.com/books/ctutorial/). Συναρτήσεις (κεφάλαιο Functions) Πίνακες (κεφάλαιο Αrrays) Συμβολοσειρές (κεφάλαιο Strings) Χρήση Βιβλιοθηκών (κεφάλαιο Libraries) Άσκηση 1η Σύμφωνα με τους κανόνες σωστής μορφοποίησης ενός κειμένου, ένα σημείο στίξης (κόμμα ή τελεία) τοποθετείται αμέσως μετά την προηγούμενη λέξη και μεσολαβεί ένα κενό πριν την επόμενη. Φτιάξτε ένα πρόγραμμα που δέχεται από το χρήστη μια ακολουθία λέξεων και να την μορφοποιεί σωστά σύμφωνα με το παραπάνω. Θεωρείστε ότι η είσοδος του χρήστη δεν θα περιέχει συνεχόμενα σημεία στίξης. Παράδειγμα εκτέλεσης του προγράμματος (με έντονα η είσοδος του χρήστη): Dwste mia protasi: The good,the bad and the ugly. Starring Clint Eastwood. The good, the bad and the ugly. Starring Clint Eastwood. #include <stdio.h> #define N 255 main() char string[n]; char buffer[n]; int i,j, words; char c; printf("dwste mia protasi: "); do string[i++] = getchar(); while(string[i-1]!= '\n'); while(string[i]!= '\0') if ((i+1 < N) && (string[i+1]!= '\0')) if (string[i] == ' ') if ( (string[i+1] == ',') (string[i+1] == '.') (string[i+1] == ' ') ) /*This space should not be printed*/ i++; continue; if (string[i] == ',' string[i] =='.') if (string[i+1]!= ' ') /*An additional space should be printed*/ printf("%c ", string[i]); i++; continue; Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 2/10

printf("%c", string[i]); i++; Άσκηση 2η Να κατασκευάσετε πρόγραμμα το οποίο να κάνει τη μετατροπή δεκαδικών ψηφίων (0 9) στον κώδικα Μορς και αντίστροφα. Συγκεκριμένα ο χρήστης θα επιλέγει τον τύπο της μετατροπής που θέλει να κάνει και κατόπιν θα εισάγει είτε μία σειρά δεκαδικών ψηφίων είτε μία σειρά τελείες / παύλες και το πρόγραμμα θα εκτυπώνει τον ισοδύναμο κώδικα Μορς ή τα ισοδύναμα ψηφία αντίστοιχα. Παράδειγμα εκτέλεσης του προγράμματος (με έντονα η είσοδος του χρήστη): 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 1 Dwse ari8mo : 2009 O isodynamos kwdikas Morse einai :..--- ----- ----- ----. 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 2 Dwse kwdika Morse:.--------.--...---.. O isodynamos ari8mos einai : 1978 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 0 Υπόδειξη: Εσωτερικά στο πρόγραμμά σας μπορείτε να αποθηκεύετε σε ένα δυσδιάστατο πίνακα την αναπαράσταση των ψηφίων σε κώδικα Μορς (http://en.wikipedia.org/wiki/morse_code). #include <stdio.h> #define N 255 printmenu() printf("\n1 - Ari8mos se kwdika Morse\n"); printf("2 - Kwdikas Morse se ari8mo\n"); printf("0 - Eksodos\n"); main() int MorseTable[10][5] = '-','-','-','-','-', '.','-','-','-','-', '.','.','-','-','-', '.','.','.','-','-', '.','.','.','.','-', '.','.','.','.','.', '-','.','.','.','.', '-','-','.','.','.', '-','-','-','.','.', '-','-','-','-','.'; Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 3/10

int i,j,k,found,numdigit,count = 0; int num[n]; char dotdash,dummy,digit; char morse[n]; char choice = '1'; while (choice!= '0') printmenu(); scanf("%c",&choice); /*A dummy read to clean the stdin*/ scanf("%c", &dummy); if (choice == '1') printf("dwse psifia: "); do scanf("%c", &digit); if (digit == '0') num[i++] = 0; if (digit == '1') num[i++] = 1; if (digit == '2') num[i++] = 2; if (digit == '3') num[i++] = 3; if (digit == '4') num[i++] = 4; if (digit == '5') num[i++] = 5; if (digit == '6') num[i++] = 6; if (digit == '7') num[i++] = 7; if (digit == '8') num[i++] = 8; if (digit == '9') num[i++] = 9; while (digit!= '\n'); count = i; printf("\no isodynamos kwdikas Morse einai: "); for (i=0; i<count; i++) for (j=0; j<5; j++) printf("%c",morsetable[num[i]][j]); printf(" "); if (choice == '2') printf("dwse kwdika Morse : "); do scanf("%c",&dotdash); morse[i++] = dotdash; while(morse[i-1]!= '\n'); printf("\no isodynamos ari8mos einai: "); while (morse[i]!= '\0') /* Traverse all ten digits*/ k = 0; found = 0; while (k<10 &&!found) /* Check every five chars to match a digit*/ j = 0; found = 1; while (j<5 && found) if (morse[i+j]!= MorseTable[k][j]) found = 0; j++; /* If found is 1 at this point, it means we found our digit at row k*/ if (found) Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 4/10

printf("%d",k); k++; /*Move five chars forward*/ i += 5; Άσκηση 3η Γράψτε ένα πρόγραμμα το οποίο να παράγει Ν=1000 τυχαίους θετικούς ακεραίους αριθμούς μεταξύ [1, Κ], όπου ακέραιος Κ > 1, και να κατασκευάζει το ιστόγραμμά τους. H συχνότητα εμφάνισης κάθε αριθμού να αποθηκεύεται σε έναν πίνακα. Ένα παράδειγμα φαίνεται στο παρακάτω σχήμα για Κ=9 : 1 ***** 2 *** 3 **** 4 ** 5 ******* 6 ***** 7 *** 8 **** 9 *** Κάθε αστέρι αντιστοιχεί σε 5 εμφανίσεις του αριθμού. Π.χ. αν ένας αριθμός έχει συχνότητα 18 τότε θα εμφανιστούν 18 / 5 = 3 αστέρια. Για την παραγωγή τυχαίων αριθμών χρησιμοποιήστε την γεννήτρια τυχαίων αριθμών rand() της γλώσσας C όπως στο παρακάτω παράδειγμα για την παραγωγή Ν τυχαίων αριθμών στο πεδίο τιμών [1,9]. Παράδειγμα: #include <stdlib,.h> #include <time.h> /* γεννήτρια παραγωγής τυχαίων αριθμών με βάση την συνάρτηση srand() */ srand((int)time(null)); /* συνάρτηση για την παραγωγή τυχαίου αριθμού μέσα σε καθορισμένο πεδίο τιμών. */ int RandomInteger(int low, int high) int k; double d; d = (double) rand() / ((double)rand_max + 1); k = (int) (d * (high low + 1)); return (low + k); Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 5/10

main() for ( i < N; i++) number = RandomInteger(1, 9); #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 #define K 9 int RandomInteger(int low,int high) int l; double d; d=(double)rand()/((double)rand_max+1); l=(int)((high-low+1)*d); return(low+l); main() int A[K],i,m,number; srand((int)time(null)); for(i=0;i<k;i++) A[i]=0; for(i=1;i<=n;i++) number=randominteger(1,k); A[number-1]++; for(i=0;i<k;i++) m=a[i]/5; printf("%d",i+1); printf(" "); while(m>0) printf("*"); m--; printf("\n", A[i]); Άσκηση 4η Γράψτε μια συνάρτηση που να υπολογίζει το άθροισμα δύο δυαδικών αριθμών. Η συνάρτηση να δέχεται ως όρισμα τρεις πίνακες ακεραίων (Α,Β,C), οι δύο (A,B) αποτελούν την είσοδο και έχουν μέγεθος Ν και ο τρίτος (C) είναι το αποτέλεσμα και έχει μέγεθος Ν+1. Θεωρείστε ότι οι πίνακες Α και Β αποτελούνται μόνο από μηδέν και ένα (δεν απαιτείται έλεγχος από εσάς). Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 6/10

Η main() παίρνει τιμές για τους δυαδικούς Α, Β από τον χρήστη, καλεί την συνάρτηση για να εκτελεστεί η πρόσθεση και τέλος εμφανίζει το αποτέλεσμα στην οθόνη. Η είσοδος των δυαδικών αριθμών από το πληκτρολόγιο γίνεται δίνοντας ο χρήστης όλα τα ψηφία του αριθμού και στο τέλος πατάει enter. ΔΕΝ δίνει ένα-ένα τα ψηφία. Εκτός από τη συνάρτηση για την πρόσθεση μπορούν να υλοποιηθούν και άλλες βοηθητικές συναρτήσεις αν χρειάζεται. Η στοιχειώδης πρόσθεση µεταξύ δυαδικών ψηφίων έχει ως εξής: 0 + 0 = 0 1 + 0 = 1 0 + 1 = 1 1 + 1 = 0 και 1 κρατούµενο για ανώτερη τάξη. #include <stdio.h> #include <string.h> #define N 41 void converttoarray(int array[n], char s[n]) int j,i; int l = strlen(s); for(i = l-1; i >=0; i--) if (s[l-1-i] == '1') array[i] = 1; array[i] = 0; for(j = N-1; j >= strlen(s); j--) array[j] = -1; void printbinary(int a[], int n) int i; for (i=n-1; i >= 0; i--) if (a[i]!= -1) printf("%d", a[i]); printf("\n"); int addbin(int a, int b, int C[N+1], int pos) int flag=0; if (a == 1 && b == 1) C[pos] = 0; Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 7/10

flag++; C[pos] = a + b; return (flag); void add(int A[N], int B[N], int C[N+1]) int i, j, flag; flag = 0; while(a[i]!= -1 && B[i]!= -1 && i < N) if (flag > 0) flag = addbin(a[i], B[i], C, i); addbin(1, C[i], C, i); flag = addbin(a[i], B[i], C, i); printf("%d: %d + %d = %d %d\n", i, A[i], B[i], C[i], flag); i++; while(i < N) if (A[i] == -1 && B[i] == -1) if (flag > 0) flag = addbin(1, 0, C, i); C[i] = -1; if (A[i] == -1) flag = addbin(b[i], flag, C, i); flag = addbin(a[i], flag, C, i); printf("%d: %d + %d = %d - %d\n", i, A[i], B[i], C[i], flag); i++; if (flag > 0) C[i] = 1; C[i] = -1; main() char n1[n+1], n2[n+1]; int A[N], B[N], C[N+1]; int i; printf("1os dyadikos arithmos megistou megethous %d: ", N); scanf("%s", &n1); printf("2os dyadikos arithmos megistou megethous %d: ", N); scanf("%s", &n2); Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 8/10

converttoarray(a, n1); printbinary(a, N); converttoarray(b, n2); printbinary(b, N); printf("---------------\n"); add(a, B, C); printbinary(c, N+1); Άσκηση 5 η Γράψτε ένα πρόγραμμα που να χρησιμοποιεί μια συνάρτηση gcd(), int gcd(int num1, int num2) που να υπολογίζει τον μέγιστο κοινό διαιρέτη δύο ακεραίων (Greatest Common Divisor gcd) αριθμών. Δείξτε μια αναδρομική και μια μη αναδρομική λύση. #include <stdio.h> int gcd_loop(int num1, int num2) int dividor; if ( num1>num2 ) dividor = num2; dividor = num1; while(dividor>0 &&!(num1%dividor==0 && num2%dividor==0)) dividor--; return dividor; int gcd_recursive(int num1, int num2) if (num1 == 0) return(num2); if (num2 == 0) return(num1); return(gcd_recursive(num2, num1 % num2)); int main() int num1, num2; printf("dwse duo ari8mous: "); scanf("%d %d", &num1, &num2); if (num1 == 0 && num2 == 0) Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 9/10

exit(-1); if (num1 < 0) num1 = -num1; if (num2 < 0) num2 = -num2; printf("\ngcd: %d\n", gcd_loop(num1, num2)); printf("\ngcd: %d\n", gcd_recursive(num1, num2)); Εισαγωγή στο διαδικαστικό Προγραμματισμό Σελίδα 10/10