Download - C Examples

Transcript
Page 1: C Examples

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΥΛΟΠΟΙΗΣΕΙΣ ΒΑΣΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ

Γλώσσα υλοποίησης C

∆ιάγραµµα ροής αλγορίθµου υπολογισµού του παραγοντικού

Σπάθας Τάσος

Page 2: C Examples

Περιεχόµενα

• Εισαγωγή• Παραδείγµατα

1. ∆ηµιουργία, καταχώρηση και ανάκτηση δεδοµένων από πίνακα . . . . . . 2. Αντιστροφή πίνακα . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

• 1ος Τρόπος• 2ος Τρόπος (Με τη βοήθεια συναρτήσεων)• 3ος Τρόπος (Με χρήση βοηθητικού πίνακα)

3. Εύρεση µικροτέρου και µεγαλυτέρου . . . . . . . . . . . . . . . . . . . . . . . . . . . • Με χρήση πίνακα• Χωρίς πίνακα

4. Παραγοντικό (Factorial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Παλινδροµικός αριθµός . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. Άθροισµα 1-1/2+1/3-1/4+...+1/n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7. Σειρά Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

• Με χρήση πίνακα• Με χρήση µεταβλητού πίνακα

8. Εύρεση πρώτων αριθµών . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9. ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10. Άθροισµα ψηφίων αριθµού . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. ∆ηµιουργία σχηµάτων . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

• Κατασκευή ρόµβου• Κατασκευή τετραγώνου• Κατασκευή ανάποδου τριγώνου• Κατασκευή σχήµατος “Χ”

12. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13. Σύγκριση ηµεροµηνιών και ωρών . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

• Σύγκριση ηµεροµηνιών• Σύγκριση ωρών

14. Ταξινοµήσεις πινάκων . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • Ταξινόµηση φυσαλίδας (Bubble sort)• Ταξινόµηση παρεµβολής (Insertion sort)• Ταξινόµηση επιλογής (Selection sort)

15. ∆οµές δεδοµένων . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16. Τέλειος αριθµός . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17. Αναζήτηση σε πίνακες . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

• Σειριακή αναζήτηση• ∆υαδική αναζήτηση

18. Σειρά Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19. Εµβαδόν τριγώνου . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20. Επίλυση εξισώσεων δευτέρου βαθµού . . . . . . . . . . . . . . . . . . . . . . . . . . 21. Αρχεία . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

•••

7••

89910

••

11121213

••••

1517

••

20•••

232526

••

28293031

Page 3: C Examples

Εισαγωγή

Κυρίαρχο στοιχείο στον προγραµµατισµό είναι οι αλγόριθµοι, οι οποίοι αποτελούνκαι τον πυρήνα της επιστήµης των ηλεκτρονικών υπολογιστών.Αλγόριθµος ονοµάζεται ένα πεπερασµένο σύνολο καθορισµένων αριθµητικών καιλογικών πράξεων καθώς και εντολών, οι οποίες όταν εφαρµοστούν σε ένα σύνολοδεδοµένων εισόδου (input data) ενός συγκεκριµένου και καλώς προσδιορισµένουπροβλήµατος, παράγουν µια λύση σε πεπερασµένο χρόνο µε τη µορφή ενός συνόλουαποτελεσµάτων (output data).Η δυσκολία του προγραµµατισµού είναι η εύρεση ενός αποτελεσµατικού καιταυτοχρόνως γρήγορου αλγορίθµου.

Παραδείγµατα

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

• Στα παραδείγµατα οι αλγόριθµοι θα αποκαλούνται προγράµµατα ήεφαρµογές.

• Όπου η χρήση πίνακα είναι απαραίτητη, χρησιµοποιείται ενδεικτικά πίνακας10 ή 100 στοιχείων.

• Όλα τα προγράµµατα δουλεύουν για ν αριθµό δεδοµένων, αρκεί να είναι τουτύπου που δηλώνεται στον κώδικα.

∆ηµιουργία, καταχώρηση και ανάκτηση δεδοµένων από πίνακα

Να γραφεί πρόγραµµα που να καταχωρεί σε πίνακα 10 ακεραίους και στη συνέχειανα τους τυπώνει στην οθόνη χωρισµένους µε κόµµα.

#include <stdio.h>#define size 10 // megethos pinakavoid main()

int pinakas[size],i;for(i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

printf("\nO pinakas periexei ta parakatw stoixeia.\n");for(i=0;i<size-1;i++)

printf("%d, ", pinakas[i]);printf("%d\n\n", pinakas[size-1]);

Page 4: C Examples

Αντιστροφή πίνακα

Να γραφεί πρόγραµµα που να καταχωρεί σε πίνακα 10 ακεραίους και στη συνέχειανα τους τυπώνει στην οθόνη µε ανάποδη σειρά, από τη σειρά εισαγωγής.

1ος Τρόπος

#include <stdio.h>#define size 10void main()

int i,temp,pinakas[size];for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

printf("\n");for (i=0;i<(size/2);i++)

temp=pinakas[i];pinakas[i]=pinakas[(size-1)-i];pinakas[(size-1)-i]=temp;

for (i=0;i<size;i++)

printf("To %do stoixeio tou anestramenou pinaka einai: %d\n", i+1,pinakas[i]);

2ος Τρόπος

Page 5: C Examples

(Με τη βοήθεια συναρτήσεων.)

#include <stdio.h>#define size 10void reverse(int pinakas[size]);void swap(int *x, int *y);void main()

int i,pinakas[size];for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

printf("\n");reverse(pinakas);for (i=0;i<size;i++)

printf("To %do stoixeio tou anestramenou pinaka einai: %d\n", i+1,pinakas[i]);

void reverse(int pinakas[size])

int i;for (i=0;i<(size/2);i++)

swap(&pinakas[i], &pinakas[(size-1)-i]);

void swap(int *x, int *y)

int temp;temp=*x;*x=*y;*y=temp;

3ος Τρόπος(Με χρήση βοηθητικού πίνακα.)

Page 6: C Examples

#include <stdio.h>#define size 10void reverse(int pinakas[size]);void main()

int i,pinakas[size];for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

printf("\n");reverse(pinakas);

void reverse(int pinakas[size])

int i,voithitikos[size];for (i=0;i<size;i++)

voithitikos[i]=pinakas[(size-1)-i];for (i=0;i<size;i++)

printf("To %do stoixeio tou anestramenou pinaka einai: %d\n", i+1,voithitikos[i]);

Ο τρόπος αυτός δίνει τα ίδια αποτελέσµατα µε τους άλλους δυο, δεν κάνει όµωςαντιστροφή του δοσµένου πίνακα. ∆ηµιουργεί καινούριο πίνακα που περιέχει ταστοιχεία του αρχικού ανεστραµµένα.

Εύρεση µικροτέρου και µεγαλυτέρου, µε ή χωρίς τη βοήθεια πίνακα

Page 7: C Examples

Να γραφεί πρόγραµµα που να δέχεται 10 ακεραίους και στη συνέχεια να τυπώνει τοµεγαλύτερο και το µικρότερο από αυτούς καθώς και τη θέση στην οποία βρίσκονταιστον πίνακα.

Με χρήση πίνακα

#include <stdio.h>#define size 10void main()

int i,k=1,g=1,min,max,pinakas[size];for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

min=pinakas[0];max=pinakas[0];for(i=1;i<size;i++)

if(pinakas[i]<min)

min=pinakas[i];k=i+1;

if(pinakas[i]>max)

max=pinakas[i];g=i+1;

printf("\nTo mikrotero stoixeio einai to %d sti thesi %d.\n", min, k);printf("To megalytero stoixeio einai to %d sti thesi %d.\n\n", max, g);

Χωρίς πίνακα

#include <stdio.h>

Page 8: C Examples

void main()

int i,min,k=1,max,g=1,temp;printf("Doste ton 1o arithmo: ");scanf("%d", &temp);min=temp;max=temp;for (i=1;i<10;i++)

printf("Doste ton %do arithmo: ", i+1);scanf("%d", &temp);if(temp<min)

min=temp;k=i+1;

if(temp>max)

max=temp;g=i+1;

printf("\nO mikroteros einai to %d kai dothike %dos.\n", min, k);printf("O megalyteros einai to %d kai dothike %dos.\n\n", max, g);

Παραγοντικό (Factorial)

Να γραφεί πρόγραµµα που να υπολογίζει το παραγοντικό ενός αριθµού.(Παραγοντικό ενός αριθµού λέγεται το γινόµενο όλων των αριθµών από το 1 έως καιτον αριθµό αυτό και συµβολίζεται µε !, π.χ. 5! = 1*2*3*4*5 = 120)

#include <stdio.h>void main()

int a,i,k=1;printf("Dose enan arithmo: ");scanf("%d", &a);for (i=1;i<(a+1);i++)

k=k*i;printf("To paragontiko tou %d einai %d .\n", a, k);

Παλινδροµικός αριθµός

Page 9: C Examples

Να γράφει πρόγραµµα που να εντοπίζει αν ο υπό εξέταση αριθµός είναιπαλινδροµικός ή όχι. (Παλινδροµικός αριθµός είναι ο αριθµός που από όπου και ανδιαβαστεί παραµένει ο ίδιος, π.χ. 1234321)

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

char arithmos[128];int i,j,k;printf("Doste ton akeraio arithmo: ");scanf("%s", arithmos);k=strlen(arithmos);j=0;for (i=0;i<(k/2);i++)

if(arithmos[i]==arithmos[(k-1)-i])j++;

if(j==(k/2))printf("O arithmos einai palindromikos.\n\n");

elseprintf("O arithmos den einai palindromikos.\n\n");

Άθροισµα 1-1/2+1/3-1/4+...+1/n

Να γραφεί πρόγραµµα που να υπολογίζει το άθροισµα: 1-1/2+1/3-1/4+1/5-...+1/n

#include <stdio.h>void main()

int a=1,i,n;double sum=0.0;printf("Doste ton akeraio arithmo: ");scanf("%d", &n);for (i=1;i<(n+1);i++)

sum=sum+((1.0/i)*a);a=a*(-1);

printf("To athrisma einai: %.3f", sum);

Σειρά Fibonacci

Page 10: C Examples

Ακολουθία αριθµών στην οποία ο κάθε αριθµός ισούται µε το άθροισµα των δυοπροηγουµένων. (Η ακολουθία Fibonacci αναπαριστά το ρυθµό αναπαραγωγής τωνκουνελιών.)

Με χρήση πίνακα

#include <stdio.h>#define size 100void main()

int i,x,pinakas[size];printf("Fores ektelesis Fibonacci: ");scanf("%d", &x);pinakas[0]=1;pinakas[1]=1;for(i=2;i<x;i++)

pinakas[i]=pinakas[i-1]+pinakas[i-2];for(i=0;i<x;i++)

printf("%d ", pinakas[i]);

Με χρήση µεταβλητού πίνακα(∆έσµευση µνήµης για την αποφυγή σπατάλης πόρων συστήµατος.)

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

int a,i,g,*pinakas;printf("Fores ektelesis Fibonacci: ");scanf("%d", &a);pinakas=(int *)malloc(a * sizeof(int));pinakas[0]=1;pinakas[1]=1;for(i=2;i < a;i++)

pinakas[i]=pinakas[i-1]+pinakas[i-2];for(g=0;g<i;g++)

printf("%d ", pinakas[g]);free(pinakas);

Εύρεση πρώτων αριθµών

Page 11: C Examples

Να γραφεί πρόγραµµα που να υπολογίζει όλους τους πρώτους αριθµούς σε διάστηµαπου θα καθορίζεται από το χρήστη.

#include < stdio.h >#define size 1000void main()

int a,i,j,k=0,c=0,pinakas[size];printf("Doste to diastima, mesa sto opoio\n");printf("thelete na vrethoun oi protoi arithmoi: 0-");scanf("%d", &a);for(i=2;i<a+1;i++)

for(j=i-1;j>1;j--)if((i % j)==0) // To symvolo % einai o telestis

c=c+1; // akeraiou ypolipou(mod)if(c==0)

pinakas[k]=i;k=k+1;

c=0;

if(k==0)

printf("\nDe vrethike kanenas protos sto diastima afto.\n");else

printf("\nVrethikan %d protoi arithmoi.\n", k);for(i=0;i<k-1;i++)

printf("%d,", pinakas[i]);printf("%d\n\n", pinakas[k-1]);

ASCII

Page 12: C Examples

Να γραφεί πρόγραµµα που να µετατρέπει τους χαρακτήρες µιας φράσης στουςαντίστοιχους κωδικούς ASCII.

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

int i,length; char string[128]; printf("Pliktrologiste mia leksi i frasi: "); gets(string); length=strlen(string); printf("\n"); for (i=0;i<length;i++)

printf(" %c -> %d\n", string[i], string[i]);

Άθροισµα ψηφίων αριθµού

Να γράφει πρόγραµµα που να υπολογίζει το άθροισµα των ψηφίων ενός ακεραίουαριθµού.

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

char arithmos[128];int i,length,sum=0;printf("Dose ton arithmo: ");scanf("%s", arithmos);length=strlen(arithmos);for (i=0;i<length;i++)

sum=sum+arithmos[i];printf("To atroisma ton psifion einai %d.\n\n", sum-length*48);

Το 48 αφαιρείται για να εξισωθεί ο κωδικός ASCII µε το δοσµένο αριθµό.

∆ηµιουργία σχηµάτων

Page 13: C Examples

Ο αριθµός εισαγωγής θα πρέπει να είναι µεγαλύτερος από το 2 ώστε να διακρίνεται ηµορφή του σχήµατος και µεγαλύτερος του 81 ώστε να χωρά το σχήµα στην οθόνη.

Κατασκευή ρόµβου

#include <stdio.h>void main()

int a,k,i,j;printf("Doste to plithos twn grammwn: ");scanf("%d", &a);j=1;k=(a-1)/2;while(k>0)

for(i=0;i<k;i++)printf(" ");

for(i=0;i<j;i++)printf("*");

j=j+2;k--;printf("\n");

j=0;while(a>0)

for(i=0;i<j;i++)printf(" ");

for(i=0;i<a;i++)printf("*");

a=a-2;j++;printf("\n");

Κατασκευή τετραγώνου

#include <stdio.h>

Page 14: C Examples

void main()

int i,a,k;printf("Doste ton arithmo: ");scanf("%d",&a);for(i=0;i<a;i++)

printf("*");printf("\n");for(i=0;i<a-2;i++)

printf("*");for(k=0;k<a-2;k++)

printf(" ");printf("*");printf("\n");

for(i=0;i<a;i++)

printf("*");printf("\n");

Κατασκευή ανάποδου τριγώνου

#include <stdio.h>void main()

int a,i,k,g;printf("Doste to mono arithmo ton asterion: ");scanf("%d", &a);for(i=0;i<a;i++)

printf("*");printf("\n");for(i=0;i<(a-1)/2;i++)

for(k=i+1;k > 0;k--)printf(" ");

for(g=0;g<((a-2)-(i*2));g++)printf("*");

printf("\n");printf("\n");

Κατασκευή σχήµατος “Χ”(Κάνοντας χρήση της συµµετρίας που παρουσιάζει το σχήµα.)

#include <stdio.h>

Page 15: C Examples

void main()

int k,c,r;printf("Doste to mono plithos grammwn: ");scanf("%d", &k);for(r=0;r<k;r++)

for(c=0;c<k;c++)if((r==c)||((k-(r+1))==c))

printf("*");else

printf(" ");printf("\n");

Strings

Να γραφεί πρόγραµµα που να δέχεται δυο strings και να ελέγχει αν το δεύτερο stringπεριέχεται αυτούσιο στο πρώτο και αν ναι, πόσες φορές και σε ποιες θέσεις.

#include <stdio.h>#include <string.h>void eleghos(char string1[128], char string2[128]);void main()

char proto[128],deftero[128];printf("To deftero string prepei na einai mikrotero\n");printf("apo to proto kai megalitero apo 2 xaraktires.\n\n");printf("Doste to proto string: ");gets(proto);printf("Doste to deftero string: ");gets(deftero);eleghos(proto,deftero);

void eleghos(char string1[128], char string2[128])

int i,j,k,c,mikos1,mikos2,pinakas[100];mikos1=strlen(string1);mikos2=strlen(string2);

Page 16: C Examples

c=0;k=0;for(i=0;i<mikos1;i++)

if (string1[i]=string2[0])

for(j=0;j<mikos2;j++)if (string1[i+j]==string2[j])

k++;if (k==mikos2)

c++;pinakas[c-1]=i+1;

k=0;

if (c==0)

printf("To deftero string de vrethike sto proto.\n");else

if ((c==1)&&(mikos1==mikos2))printf("To deftero string einai idio me to proto.\n");

else

if (c==1)printf("To deftero string vrethike sti %d thesi touprotou.\n", pinakas[c-1]);

else

printf("To deftero string vrethike %d fores.\n", c);for(j=0;j<c;j++)

printf("Sti thesi %d.\n", pinakas[j]);

Σύγκριση ηµεροµηνιών και ωρών

Σύγκριση ηµεροµηνιών

Να γράφει πρόγραµµα που να δέχεται δυο ηµεροµηνίες, να υπολογίζει τηµεταγενέστερη καθώς και τη µεταξύ τους απόσταση.

Page 17: C Examples

#include <stdio.h>#include <string.h>void diafora();void main()

int a,a1,a2,a3,b,b1,b2,b3;char im1[10],im2[10];printf("Oi imerominies prepei na dinontai sti morfi 09/04/2001.\n");printf("\n");printf("Doste tin proti imerominia: ");scanf("%s", &im1);printf("Doste ti defteri imerominia: ");scanf("%s", &im2);a1=(im1[0]-48)*10+(im1[1]-48);a2=(im1[3]-48)*10+(im1[4]-48);a3=(im1[6]-48)*1000+(im1[7]-48)*100+(im1[8]-48)*10+(im1[9]-48);a=a1+(a2*30.42)+(a3*365.25);b1=(im2[0]-48)*10+(im2[1]-48);b2=(im2[3]-48)*10+(im2[4]-48);b3=(im2[6]-48)*1000+(im2[7]-48)*100+(im2[8]-48)*10+(im2[9]-48);b=b1+(b2*30.42)+(b3*365.25);if(a==b)

printf("Oi dio imerominies einai idies.\n");else

if(a>b)

printf("H proti imerominia einai metagenesteri tis defteris,\n");diafora(&a,&b);

else

printf("H defteri imerominia einai metagenesteri tis protis,\n");diafora(&b,&a);

void diafora(x,y)int *x, *y;

int diaf,a,b,c;diaf=*x-*y;c=diaf/365.25;b=(diaf-(c*365.25))/30.42;

Page 18: C Examples

a=diaf-((c*365.25)+(b*30.42));printf("kata %d meres, %d mines kai %d xronia.\n", a, b, c);

Τις ηµεροµηνίες το πρόγραµµα τις δέχεται σαν strings µε αποτέλεσµα να είναιαπαραίτητη η αφαίρεση του 48 έτσι ώστε να εξισωθεί ο κωδικός ASCII µε τουςδοσµένους αριθµούς. Το 30.42 είναι ο µέσος όρος των ηµερών του µήνα.Το 365.25 είναι ο µέσος όρος των ηµερών του χρόνου, λόγω του δίσεκτου έτους.

Σύγκριση ωρών

Να γράφει πρόγραµµα που να δέχεται δυο ώρες, να υπολογίζει την αργότερη καθώςκαι τη µεταξύ τους απόσταση.

#include <stdio.h>#include <string.h>void diafora();void main()

int a,a1,a2,b,b1,b2;char wra1[5],wra2[5];printf("Oi wres prepei na dinontai sti morfi 21:06 kai 04:15.\n");printf("\n");printf("Doste tin proti wra: ");scanf("%s", &wra1);printf("Doste ti defteri wra: ");scanf("%s", &wra2);a1=(wra1[0]-48)*10+(wra1[1]-48);a2=(wra1[3]-48)*10+(wra1[4]-48);a=(a1*60)+a2;b1=(wra2[0]-48)*10+(wra2[1]-48);b2=(wra2[3]-48)*10+(wra2[4]-48);b=(b1*60)+b2;

if(a==b)printf("\nOi dio wres einai idies.\n");

else

if(a>b)

printf("\nApo tis %s ews tis %s mesolavoun ", wra2, wra1);diafora(&a,&b);

Page 19: C Examples

else

printf("\nApo tis %s ews tis %s mesolavoun ", wra1, wra2);diafora(&b,&a);

void diafora(x,y)int *x, *y;

int diaf,a,b;diaf=*x-*y;a=diaf/60;b=diaf-(a*60);printf("%d wres kai %d lepta.\n", a, b);

Το 48 αφαιρείται για να εξισωθεί ο κωδικός ASCII µε το δοσµένο αριθµό.

Ταξινοµήσεις πινάκων

Ταξινόµηση φυσαλίδας (Bubble sort)

Η µέθοδος αυτή ταξινοµεί τα στοιχεία ενός πίνακα µε διαδοχικά περάσµατα. Σε κάθεπέρασµα συγκρίνονται δυο διπλανά στοιχεία και αν είναι εκτός της επιθυµητήςδιάταξης αντιµετατίθενται.

#include <stdio.h>

Page 20: C Examples

#define size 10void swap(int *a1,int *b1);void main()

int pinakas[size],i,j;for(i=0;i<size;i++)

printf("Dose to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

printf("\n");printf("O pinakas meta tin taksinomisi einai o parakato.\n");printf("\n");for(j=0;j<size;j++)

for(i=0;i<size;i++)if (pinakas[i]>pinakas[i+1])

swap(&pinakas[i],&pinakas[i+1]);for(i=0;i<size;i++)

printf("To %do stoixeio tou pinaka einai: %d\n", i+1, pinakas[i]);

void swap(int *a1,int *b1)

int x;x=*a1;*a1=*b1;*b1=x;

Ταξινόµηση παρεµβολής (Insertion sort)

Η µέθοδος αυτή ταξινοµεί τα στοιχεία ενός πίνακα συγκρίνοντας το καθένα από αυτάµε όλα τα προηγούµενα έως ότου φτάσει στη σωστή θέση.

#include <stdio.h>#define size 10void main()

int i,x,j,pinakas[size];

Page 21: C Examples

for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

for (i=1;i<size;i++)

x=pinakas[i];j=i;while (x<pinakas[j-1])

pinakas[j]=pinakas[j-1];j=j-1;

pinakas[j]=x;

printf("\n");for (i=0;i<size;i++)

printf("To %do stoixeio tou taksinomimenou pinaka einai: %d\n", i+1,pinakas[i]);

Ταξινόµηση επιλογής (Selection sort)

Η µέθοδος αυτή ταξινοµεί τα στοιχεία ενός πίνακα βρίσκοντας κάθε φορά το στοιχείοπου ικανοποιεί τη συνθήκη ταξινόµησης (π.χ. εύρεση µικροτέρου ή µεγαλυτέρου),και αντιµεταθέτοντάς το µε το στοιχείο από το οποίο ξεκίνησε η αναζήτηση τουστοιχείου.

#include < stdio.h >#define size 10void swap();void main()

Page 22: C Examples

int i,j,k,min,pinakas[size];for (i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

for(i=0;i<(size-1);i++)

min=pinakas[i];for (j=i;j<size;j++)

if(min>pinakas[j])

min=pinakas[j];k=j;

if(min!=pinakas[i])

swap(&pinakas[i],&pinakas[k]);printf("\n");for (i=0;i<size;i++)

printf("To %do stoixeio tou taksinomimenou pinaka einai: %d\n", i+1,pinakas[i]);

void swap(a,b)int *a,*b;

int x;x=*a;*a=*b;*b=x;

∆οµές δεδοµένων

Να δηµιουργηθεί µια δοµή µε το όνοµα “Student” που να περιέχει τα στοιχεία ενόςφοιτητή. Τα στοιχεία θα ζητούνται από το χρήστη θα καταχωρούνται σε πίνακα καιστη συνέχεια θα τυπώνονται στην οθόνη.

#include <stdio.h>#include <string.h>#define size 100struct namerec

char mikro[20];

Page 23: C Examples

char epitheto[25];;struct birthdaterec

int mera;int minas;int xronos;

;struct lessonsrec

char mathima[40];float vathmos;

;struct student

int mitroo;struct namerec onoma; char patronymo[20];char sex;struct birthdaterec imgenisis;char tmima[40];struct lessonsrec mathimata[50];int counter;

;

struct student pinakas[size];int g,plithos=0;void emfanisi(int *t);

void main()

int c=0;char ch[3],temp[5];struct student foititis;

printf("\n- EISAGWGH STOIXEIWN FOITHTH -\n");printf("\nArithmos mitroou: ");scanf("%d", &foititis.mitroo);printf("\n** ONOMA **");printf("\nMikro: ");scanf("%s", &foititis.onoma.mikro);printf("Epitheto: ");scanf("%s", &foititis.onoma.epitheto);printf("\nOnoma patera: ");scanf("%s", &foititis.patronymo);printf("\nSex (M)ale/(F)emale: ");scanf("%s", &foititis.sex);printf("\n** HMEROMHNIA GENNHSHS **\n");

Page 24: C Examples

printf("\nMera: ");scanf("%d", &foititis.imgenisis.mera);printf("Minas: ");scanf("%d", &foititis.imgenisis.minas);printf("Xronos: ");scanf("%d", &foititis.imgenisis.xronos);printf("\n** TMHMA **");printf("\nTmima: ");scanf("%s", &foititis.tmima);printf("\n** VATHMOLOGIA **\n");printf("Gia na diakopsete tin eisagwgi mathimatwn,\n");printf("pliktrologiste 'telos'.\n");do

printf("\nTitlos mathimatos: ");scanf("%s", &foititis.mathimata[c].mathima);strcpy(temp,foititis.mathimata[c].mathima);if(strcmp(temp,"telos")==0)

printf("- Telos eisagwgis dedomenwn. -\n");else

printf("Vathmos: ");scanf("%f", &foititis.mathimata[c].vathmos);c++;

while((c<50)&&(strcmp(temp,"telos")!=0));foititis.counter=c;pinakas[plithos]=foititis;plithos++;printf("\nThelete na kanete eisagwgi stoixeiwn kai gia allo foititi?\n");printf("yes/no: ");scanf("%s", &ch);

if(strcmp(ch,"yes")==0)main();

else

printf("\n- Telos eisagwgis dedomenwn. -\n\n");for(g=0;g<plithos;g++)

emfanisi(&g);

void emfanisi(int *t)

int i;printf("\nA.M.: %d | %s %s | On.Patera: %s | Sex: %c | HmGen.: %d/%d/%d",

Page 25: C Examples

pinakas[*t].mitroo, pinakas[*t].onoma.mikro, pinakas[*t].onoma.epitheto,pinakas[*t].patronymo, pinakas[*t].sex, pinakas[*t].imgenisis.mera,pinakas[*t].imgenisis.minas, pinakas[*t].imgenisis.xronos);printf("\nTmima: %s", pinakas[*t].tmima);

printf("\n** MATHIMATA **\n");for(i=0;i<pinakas[*t].counter;i++)

printf("%d. Titlos mathimatos: %s Vathmos: %.1f\n", i+1,pinakas[*t].mathimata[i].mathima, pinakas[*t].mathimata[i].vathmos);

Τέλειος αριθµός

Να γραφεί πρόγραµµα που να υπολογίζει αν ένας αριθµός είναι τέλειος. (Τέλειοςονοµάζεται ένας αριθµός όταν είναι ίσος µε το άθροισµα όλων των διαιρετών του, π.χ. το 6 αφού 1+2+3=6).

#include <stdio.h>void main()

int i,x,sum=0;printf("Doste ton arithmo: ");scanf("%d", &x);for(i=1;i<x;i++)

if((x % i)==0)sum=sum+i;

if(sum==x)printf("\nTo %d einai teleios arithmos.\n\n", x);

elseprintf("\nTo %d den einai teleios arithmos.\n\n", x);

Αναζήτηση σε πίνακες

Σειριακή αναζήτηση

Αυτή η µέθοδος αναζήτησης διατρέχει ένα-ένα τα στοιχεία ενός πίνακα, από τηναρχή µέχρι τον εντοπισµό του προς εύρεση στοιχείου.

#include <stdio.h>#define size 10void main()

int i,x,flag=0,pinakas[size];for(i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);

Page 26: C Examples

scanf("%d", &pinakas[i]);printf("\nDoste to stoixeio pou anazitate: ");scanf("%d", &x);i=0;do

if(pinakas[i]==x)

flag=1;printf("Vrethike sti thesi %d tou pinaka.\n\n", i+1);

else

i++;while((flag==0)&&(i<size));if(flag==0)

printf("De vrethike.\n\n");

∆υαδική αναζήτηση

Η δυαδική αναζήτηση εφαρµόζεται σε ταξινοµηµένους πίνακες, διχοτοµεί σε κάθεεπανάληψη το µέρος του πίνακα που δεν έχει διερευνηθεί και περιορίζει τηναναζήτηση στο µισό πίνακα.

#include <stdio.h>#define size 10void main()

int i,first=0,last=size-1,flag=0,x,pinakas[size];for(i=0;i<size;i++)

printf("Doste to %do stoixeio tou pinaka: ", i+1);scanf("%d", &pinakas[i]);

Page 27: C Examples

printf("\nDoste to stoixeio pou anazitate: ");scanf("%d", &x);while((first<(last+1))&&(flag==0))

i=(first+last)/2;if(x==pinakas[i])

flag=1;printf("Vrethike sti thesi %d tou pinaka.\n", i+1);

else

if(x<pinakas[i])last=i-1;

elsefirst=i+1;

if(flag==0)

printf("De vrethike.\n");

Σειρά Taylor

Να γραφεί πρόγραµµα που να υπολογίζει τη σειρά Taylor:

x - x3/3! + x5/5! - x7/7! + x11/11! – x13/13! + …

#include <stdio.h>float paragontiko(int *p);float dynami(int *d);float x;

void main()

int i=2,c=0,fores=1,j,n;double sum,a;printf("Doste to x: ");scanf("%f", &x);

Page 28: C Examples

printf("Fores ektelesis Taylor: ");scanf("%d", &n);a=-1.0;sum=x;do

i++; // oi ekthetes kai oi paranomastes einai protoi arithmoifor(j=i-1;j>1;j--)

if((i % j)==0)c=c+1;

if(c==0)

fores++;sum=sum+(dynami(&i)/paragontiko(&i)*a);a=a*(-1.0);

c=0;

while(fores<n);printf("\nTo athrisma einai: %.3f\n\n", sum);

float dynami(int *d)

int g;float apot=1.0;for(g=0;g<*d;g++)

apot=apot*x;return apot;

float paragontiko(int *p)

int j;float para=1.0;for(j=1;j<(*p+1);j++)

para=para*j;return para;

Εµβαδόν τριγώνου

Να γραφεί πρόγραµµα που να υπολογίζει το εµβαδόν ενός τριγώνου µε πλευρές a, b,c, κάνοντας χρήση του τύπου του Ήρωνα.

t*(t-a)*(t-b)*(t-c) όπου t=(a+b+c)/2

Page 29: C Examples

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

float a,b,c;double t,s,e;printf("Doste to mikos tis protis pleyras: ");scanf("%f", &a);printf("Doste to mikos tis defteris pleyras: ");scanf("%f", &b);printf("Doste to mikos tis tritis pleyras: ");scanf("%f", &c);t=(a+b+c)/2.0;s=t*(t-a)*(t-b)*(t-c);e=sqrt(s);printf("To emvadon toy trigonou einai: %.3f\n\n", e);

Επίλυση εξισώσεων δευτέρου βαθµού

Να γράφει πρόγραµµα που να υπολογίζει τις ρίζες, αν αυτές υπάρχουν, µιαςδευτεροβάθµιας εξίσωσης.

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

float a,b,c;double tmp,diakrinousa,x1,x2;printf("Doste ti stathera a: ");scanf("%f", &a);printf("Doste ti stathera b: ");scanf("%f", &b);printf("Doste ti stathera c: ");scanf("%f", &c);if(a==0)

if(b==0)

Page 30: C Examples

if(c==0)

printf("\nH eksisosi einai aoristi.\n\n");else

printf("\nH eksisosi einai adynati.\n\n");else

printf("\nH eksisosi einai protou vathmou.\n");tmp=-(c/b);printf("x=%.3f\n\n", tmp);

else

diakrinousa=(b*b)-(4.0*a*c);printf("\nDiakrinousa: %.3f\n", diakrinousa);if(diakrinousa<0)

printf("\nH eksisosi den exei pragmatikes rizes.\n\n");else

if(diakrinousa==0)

tmp=-b/(2*a);printf("\nYparxei mia dipli riza: %.3f\n\n", tmp);

else

tmp=sqrt(diakrinousa);x1=(-b+tmp)/(2*a);x2=(-b-tmp)/(2*a);printf("\nProti riza: %.3f\n", x1);printf("Defteri riza: %.3f\n\n", x2);

Αρχεία

Να γραφεί πρόγραµµα που να δηµιουργεί αρχείο µε όνοµα AISP.TXT, όπου οχρήστης θα καταχωρεί κείµενο και κατόπιν να τυπώνει το περιεχόµενο του αρχείουστην οθόνη.

#include <stdio.h>

Page 31: C Examples

void main()

FILE *fp;char x;printf("Doste to periexomeno tou arxeiou\n");printf("Gia na stamatisete plikrologiste # kai patiste ENTER.\n\n");// Dimiourgia arxeiou kai anoigma tou gia eggrafifp=fopen("AISP.TXT","w");do

x=getchar();if(x!='#')

fprintf(fp,"%c", x);while(x!='#');fclose(fp);printf("\nEmfanisi periexomenwn arxeiou.\n\n");// Anoigma arxeiou gia anagnosifp=fopen("AISP.TXT","r");do

x=getc(fp);putc(x,stdout);

while(x!=EOF); // End Of Filefclose(fp);printf("\n\n");