Αρχές Προγραμματισμού

Σχετικά έγγραφα
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

Τύποι Δεδομένων Είσοδος/Έξοδος

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

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

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

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

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

Αρχές Προγραμματισμού

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Διάλεξη 9η: Πίνακες (arrays)

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

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

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

Αρχές Προγραμματισμού

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 11η: Δείκτες, μέρος 1

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

ΛΥΜΕΝΕΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ-ΓΛΩΣΣΑ C ΑΤΕΙ (ΝΑ ΕΚΤΕΛΕΣΤΟΥΝ ΤΑ ΠΑΡΑΚΑΤΩ ΜΕ ΧΡΗΣΗ ΤΟΥ LCC COMPILER)

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Δομημένος Προγραμματισμός

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

Αρχές Προγραμματισμού

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

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

Διάλεξη 5: Δείκτες και Συναρτήσεις

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

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

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

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

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

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

Προγραμματισμός I (Θ)

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

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

Υπολογισμός - Εντολές Επανάληψης

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

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

Προγραμματισμό για ΗΜΥ

Προγραμματισμός I (E)

Transcript:

Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr Formatted output οδηγία τύπος %i ή %d int %c char %f float %lf double %s αλφαριθμητικό 1

#include <stdio.h> int main(void) { int number = 15, another= 4567; printf("%d\n", number); printf("%3d\n", number); printf("%03d\n", number); printf("%+03d\n", number); printf("%3d\n", another); printf("%x\n", number); printf("%x\n", number); printf("%4x\n", number); printf("%04x\n", number); printf("%o\n", number); 15 15 015 +15 4567 f F F 000F 17 #include <stdio.h> int main(void) { float test = 56.47; printf("%f\n", test); printf("%10f\n", test); printf("%7.2f\n", test); printf("%+7.2f\n", test); printf("%5f\n", test); 56.470001 56.470001 56.47 +56.47 56.470001 2

Μέγεθος τύπου Τελεστής sizeof 5 Τροποποίηση τύπων: long, unsigned, long long #include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(void) { long long unsigned m = 1ULL << 63ULL; long unsigned n = 1ULL << 31ULL ; unsigned l = 1ULL << 31ULL ; unsigned short s = 1ULL<< 15ULL; short sb = s; printf("long long number: %"PRIu64" with a size of %d bytes\n", m, sizeof m ); printf("long number: %lu with a size of %d bytes\n", n, sizeof n ); printf("number: %u with a size of %d bytes\n", l, sizeof l ); printf("unsigned short number: %8u with a size of %d bytes\n", s, sizeof s); printf("short number: %8d with a size of %d bytes\n", sb, sizeof sb ); 6 3

C99 fixed-width types <stdint.h> int8_t int16_t int32_t int64_t signed integer type with width of exactly 8, 16, 32 and 64 bits respectively with no padding bits and using 2's complement for negative values (provided only if the implementation directly supports the type) int_fast8_t int_fast16_t int_fast32_t int_fast64_t fastest signed integer type with width of at least 8, 16, 32 and 64 bits respectively int_least8_t int_least16_t int_least32_t int_least64_t smallest signed integer type with width of at least 8, 16, 32 and 64 bits respectively 7 intmax_t maximum width integer type intptr_t integer type capable of holding a pointer uint8_t uint16_t uint32_t uint64_t unsigned integer type with width of exactly 8, 16, 32 and 64 bits respectively (provided only if the implementation directly supports the type) uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t fastest unsigned integer type with width of at least 8, 16, 32 and 64 bits respectively uint_least8_t uint_least16_t uint_least32_t uint_least64_t smallest unsigned integer type with width of at least 8, 16, 32 and 64 bits respectively uintmax_t maximum width unsigned integer type uintptr_t unsigned integer type capable of holding a pointer 8 4

Macros for data types <inttypes.h> Equivalent for int or unsigned int Περιγραφή [u]intx_t [u]int_leastx_t [u]int_fastx_t [u]intmax_t [u]intptr_t x = 8, 16, 32 or 64 %d PRIdx PRIdLEASTx PRIdFASTx PRIdMAX PRIdPTR output of a signed %i decimal integer value PRIix PRIiLEASTx PRIiFASTx PRIiMAX PRIiPTR %u %o %x %X output of an unsigned decimal integer value output of an unsigned octal integer value output of an unsigned lowercase hexadecimal integer value output of an unsigned uppercase hexadecimal integer value PRIux PRIuLEASTx PRIuFASTx PRIuMAX PRIuPTR PRIox PRIoLEASTx PRIoFASTx PRIoMAX PRIoPTR PRIxx PRIxLEASTx PRIxFASTx PRIxMAX PRIxPTR PRIXx PRIXLEASTx PRIXFASTx PRIXMAX PRIXPTR 9 Macros for data types Equivalent for int or unsigned int Περιγραφή [u]intx_t [u]int_leastx_t [u]int_fastx_t [u]intmax_t [u]intptr_t %d %i %u %o %x input of a signed decimal integer value input of a signed integer value (base is determined by the first characters parsed) input of an unsigned decimal integer value input of an unsigned octal integer value input of an unsigned hexadecimal integer value x = 8, 16, 32 or 64 SCNdx SCNdLEASTx SCNdFASTx SCNdMAX SCNdPTR SCNix SCNiLEASTx SCNiFASTx SCNiMAX SCNiPTR SCNux SCNuLEASTx SCNuFASTx SCNuMAX SCNuPTR SCNox SCNoLEASTx SCNoFASTx SCNoMAX SCNoPTR SCNxx SCNxLEASTx SCNxFASTx SCNxMAX SCNxPTR 10 5

#include <stdio.h> int main () { int value = 5; short choice ; long long longv ; printf("value: %d\n", value); scanf("%lld", &longv); scanf("%hd", &choice); // A C99 feature printf("choice: %hd value: %d longv: %lld", choice, value, longv); 11 Πίνακες στη C Δεσμεύουν συνεχή χώρο στη μνήμη Οι ακόλουθες δηλώσεις οδηγούν τον compiler να δημιουργήσει διαφορετική assembly. int a[32]; int s = 32; int a[s]; 12 6

Παράδειγμα #include <stdio.h> int main ( ) { int i; float temp[3] = { -2.1, 5.5, 10.1; for (i=0; i< 3; i = i + 1) printf("\ttemp[%d]: %f\n", i, temp[i]); printf("\ttemp[%d]: %+6.2f\n", i, temp[i]); cygwin 13 Πίνακες Συλλογή μεταβλητών ίδιου τύπου, οι οποίες αποθηκεύονται σε διαδοχικές θέσεις μνήμης. float temperature[31]; δήλωση πίνακα μεταβλητών float, 31 στοιχείων temperature[0] είναι το πρώτο στοιχείο, temperature[1] είναι το δεύτερο στοιχείο,... temperature[30] είναι το τριακοστό πρώτο στοιχείο, temperature είναι η διεύθυνση του πρώτου στοιχείου temperature είναι το ίδιο με &temperature[0] 14 7

#include <stdio.h> #define N 10 int main() { int i ; int data[n] = {0; for (i=0; i< 10; i++) printf("%d %d %p\n", i, data[i], &data[i]); 0 1 2 3 4 5 6 7 8 9 15 Πίνακες δύο (ή περισσότερων) διαστάσεων int a[3][3] ; int a[3][3] = {{1,2,3, {3,2,1, {1,1,1; 1 2 3 3 2 1 1 1 1 16 8

#include <stdio.h> #define N 3 int main ( ) { int i, j; int a[n][n] = {{1,2,3, {3,2,1, {1,1,1; for (i=0; i<n; i++) { for (j=0; j<n; j++) printf("%d ",a[i][j]); printf("\n"); system("pause"); Αποθήκευση στη μνήμη a[1] σημαίνει δεύτερη γραμμή a[1][2] σημαίνει τρίτο στοιχείο δεύτερης γραμμής 1 2 3 3 2 1 1 1 1 Διεύθυνση Στοιχείο 1000 1 1004 2 1008 3 100C 3 1010 2 1014 1 1018 1 101C 1 1020 1 18 9

#include <stdio.h> #define N 3 int main ( ) { int i, j; int a[n][n] = {{1,2,3, {3,2,1, {1,1,1; int *b = &a[0][0]; for (i=0; i< N; i++) { for (j=0; j< N; j++) printf("%d ",a[i][j]); printf("\n"); for (i=0; i< N*N; i++) printf("%d ", *(b+i)); system("pause"); Συνάρτηση της βασικής βιβλιοθήκης scanf ( ) int number; char ch; %d θα διαβάσει ακέραιο scanf("%d", &number); %c θα διαβάσει χαρακτήρα scanf("%c", &ch); τελεστής διεύθυνσης (&): Επιστρέφει τη διεύθυνση της θέσης μνήμης η οποία αντιστοιχεί στη μεταβλητή που ακολουθεί 20 10

#define N 2 #include <stdio.h> int main ( ) { int data[n][n] ; int i, j ; Παράδειγμα for (i =0 ; i < N ; i++) for ( j = 0 ; j < N ; j ++) { printf ("element (%d,%d)?\t", i, j); scanf("%d", &data[i][j]); for (i =0 ; i < N ; i++) { for ( j = 0 ; j < N ; j ++) printf ("%d\t", data[i][j]); printf("\n"); 21 #define N 2 #include <stdio.h> void readdata(int [N][N]); void writedata(int [N][N]); int main ( ) { int data[n][n] ; readdata(data) ; writedata(data); void readdata(int a[n][n]) { int i,j; for (i =0 ; i < N ; i++) for ( j = 0 ; j < N ; j ++) { printf ("element (%d,%d)?\t", i, j); scanf("%d", &a[i][j]); void writedata(int b[n][n]) { int i,j; for (i =0 ; i < N ; i++) { for ( j = 0 ; j < N ; j ++) printf ("%d\t", b[i][j]); printf("\n"); Καλύτερα! 11

ΠΡΟΣΟΧΗ!!! ΤΕΡΑΣΤΙΟ ΛΑΘΟΣ!!! Δεν χρησιμοποιείται ο πίνακας data αλλά περιοχή μνήμης που αρχίζει στη διεύθυνση που περιέχεται στο data[n][n], το οποίο είναι εκτός του πίνακα. Λόγω του λάθους αυτού, το Πρόγραμμα θα έχει απρόβλεπτη συμπεριφορά. Σε μερικές περιπτώσεις μπορεί να Φαίνεται ότι λειτουργεί, αλλά θα Δημιουργήσει προβλήματα μόλις Προστεθεί περαιτέρω κώδικας. Ο compiler δίνει warnings 23 #define N 2 #include <stdio.h> void readdata(int [N][N]); void writedata(int [N][N]); int sumdata(int [N][N]); int main ( ) { int data[n][n] ; readdata(data) ; writedata(data); printf("the sum is: %d\n", sumdata(data)); int sumdata(int x[n][n]) { int i, j; int sum = 0; for (i=0; i<n; i++) for (j=0; j<n; j++) sum += x[i][j]; return sum; 12

Παράδειγμα Ζητήθηκε από 40 φοιτητές να βαθμολογήσουν το φαγητό στο κυλικείο από 1 (απαίσιο) έως και 10 (αστέρι michelin). Να συνοψίσουμε τα αποτελέσματα. Από Deitel & Deitel. Λεκτική περιγραφή Προστακτικός προγραμματισμός: (οργάνωση προγράμματος συναρτήσεις) Διάβασε τις απαντήσεις Υπολόγισε το ιστόγραμμα generatehist() Παρουσίασε το αποτέλεσμα printhist() Αναπαράσταση δεδομένων Πίνακας για απαντήσεις responses[ ] Πίνακας για ιστόγραμμα frequency[ ] 13

#include <stdio.h> #include <stdlib.h> #define RESPONSE_SIZE 40 #define FREQUENCY_SIZE 11 Πρότυπα συναρτήσεων Υλοποίηση συναρτήσεων void generatehist(int [], int []); void printhist(int []); void printstars(int ); int main() { int frequency[ FREQUENCY_SIZE ] = { 0 ; int responses[ RESPONSE_SIZE ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 ; generatehist(frequency, responses); printhist(frequency); void generatehist(int frequency[], int responses[]){ int answer; for ( answer = 0; answer <= RESPONSE_SIZE - 1; answer++ ) ++frequency[ responses [ answer ] ]; void printhist(int frequency[]) { int rating; printf( "%s%17s Bar\n", "Rating", "Frequency" ); for ( rating = 1; rating <= FREQUENCY_SIZE - 1; rating++ ) { printf( "%6d%17d ", rating, frequency[ rating ] ); printstars(frequency[rating]); printf("\n"); void printstars(int len){ int i; for (i=0;i<len;i++) putchar('*'); Η λεκτική περιγραφή αντιστοιχίζεται σε κλήση συναρτήσεων. #include <stdio.h> #define RESPONSE_SIZE 40 #define FREQUENCY_SIZE 11 int main() { int answer, rating, frequency[ FREQUENCY_SIZE ] = { 0 ; int responses[ RESPONSE_SIZE ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 ; for ( answer = 0; answer <= RESPONSE_SIZE - 1; answer++ ) ++frequency[ responses [ answer ] ]; printf( "%s%17s\n", "Rating", "Frequency" ); for ( rating = 1; rating <= FREQUENCY_SIZE - 1; rating++ ) printf( "%6d%17d\n", rating, frequency[ rating ] ); 14