Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C
H C δημιουργήθηκε το 1972 στα Bell Labs από τον Dennis Ritchie καθώς, μαζί με τον Ken Thompson, σχεδίαζαν το λειτουργικό σύστημα UNIX. Στην ουσία, η C προήλθε από την γλώσσα B που είχε επινοήσει ο Thompson.
Αν και οι περισσότερες γλώσσες στοχεύουν στο να είναι χρήσιμες, συχνά επινοούνται και για άλλους λόγους. Για παράδειγμα, η Pascal σχεδιάσθηκε κυρίως για εκπαιδευτικούς σκοπούς(διδασκαλία αρχών προγραμματισμού) ενώ η BASIC σχεδιάσθηκε ως μια φιλική γλώσσα που μαθαίνεται εύκολα ακόμη και αν δεν υπάρχει εξοικείωση με τους Η/Υ.
Σε αντίθεση με τα παραπάνω, η C σχεδιάσθηκε για να αποτελέσει ένα χρήσιμο εργαλείο για προγραμματιστές. Η ραγδαία εξάπλωσή της και η καθιέρωσή της ως μιας από τις πιο σημαντικές γλώσσες προγραμματισμού οφείλεται στους εξής λόγους:
1.Περιλαμβάνει χαρακτηριστικά που η υπολογιστική επιστήμη θεωρεί ότι είναι επιθυμητά (π.χ η C επιτρέπει, με φυσικό τρόπο, στους χρήστες να χρησιμοποιούν αναλυτικό-εκ των άνω προς τα κάτω-ή/και δομημένο προγραμματισμό καθώς και αρθρωτό σχεδιασμό λογισμικού. Το αποτέλεσμα είναι ένα πιο αξιόπιστο και κατανοητό πρόγραμμα.)
2.Η C είναι μια αποτελεσματική γλώσσα που επωφελείται από τις δυνατότητες των σύγχρονων Η/Υ (τα C προγράμματα έχουν την τάση να είναι πιο συμπαγή και να εκτελούνται πιο γρήγορα).
3.Η C είναι μια μεταφέρσιμη(portable) γλώσσα (o C κώδικας που έχει γραφεί σε κάποιο σύστημα μπορεί να χρησιμοποιηθεί αυτούσιος και σε άλλα συστήματα)
4.Η C είναι ένα πανίσχυρο και ευέλικτο προγραμματιστικό εργαλείο (π.χ το 94%, περίπου, του λειτουργικού συστήματος UNIX είναι γραμμένο σε C συμπεριλαμβανομένων και μεταγλωττιστών και διερμηνευτών για άλλες γλώσσες όπως, η FORTRAN, η APL, η PASCAL, η LISP, η LOGO και η BASIC).
5.Η C παρέχει δυνατότητες λεπτομερούς ελέγχου της ροής του προγράμματος που συνήθως συσχετίζονται με τη συμβολική γλώσσα ASSEMBLY (επιτρέπει βελτιστοποίηση των προγραμμάτων για μέγιστη επίδοση).
6.H C είναι μια φιλική δομημένη γλώσσα που ενθαρρύνει τις καλές προγραμματιστικές συνήθειες
Προγραμματιστικές Πρακτικές
1)Αναλυτικός Προγραμματισμός(top-down programming)
Το πρόγραμμα δομείται με αναλυτικό τρόπο ως εξής: α) γράφουμε το κυρίως σώμα του προγράμματος που περιέχει κλήσεις προς ορισμένες βασικές ρουτίνες, και β) γράφεται ο κώδικας για κάθε ρουτίνα με κλήσεις προς άλλες, χαμηλοτέρου επιπέδου, ρουτίνες.
2)Δομημένος Προγραμματισμός(structured programming)
Προγραμματισμός που παράγει προγράμματα με σαφή ροή και διαφανή σχεδιασμό. Συνήθως είναι ιεραρχικής δομής ή έχει και κάποιο βαθμό διαίρεσης σε υπομονάδες.
3)Αρθρωτός Προγραμματισμός(modular programming)
Αναλύουμε το πρόγραμμα σε πολλές, ανεξάρτητα μεταγλωττιζόμενες, υπομονάδες (modules). Η κάθε υπομονάδα εξάγει συγκεκριμένα στοιχεία (π.χ σταθερές,μεταβλητές,συναρτήσεις,διαδικασίες) που μπορούν να χρησιμοποιηθούν από τις άλλες υπομονάδες. Οι υπομονάδες κάνουν διαυγέις και ομαλές τις σχέσεις μεταξύ των κυριοτέρων τμημάτων ενός προγράμματος διευκολύνοντας τις ομαδικές προγραμματιστικές εργασίες.
ΣΤΑΔΙΑ ΔΗΜΙΟΥΡΓΙΑΣ ΚΑΙ ΕΚΤΕΛΕΣΗΣ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C
Χρησιμοποιούμε έναν συντάκτη (editor) για να γράψουμε το πρόγραμμά μας σε ένα ʽ.cʼ αρχείο.
Υποβάλουμε το πρόγραμμά μας σε μεταγλώττιση χρησιμοποιώντας τον φιλικό μεταγλωττιστή (compiler) της C. Ο μεταγλωττιστής αρχικά θα ελέγξει το πρόγραμμά μας για πιθανά συντακτικά και σημασιολογικά σφάλματα. Αν δεν βρει σφάλματα, θα μεταφράσει το πρόγραμμα σε συμβολική γλώσσα και ο συμβολομεταφραστής θα δημιουργήσει ένα παράγωγο πρόγραμμα (object program) σε ʽ.οʼ αρχείο.
Στη συνέχεια, γίνεται η σύνδεση του παράγωγου προγράμματός μας με άλλα παράγωγα προγράμματα καθώς και με τις βιβλιοθήκες του συστήματος μέσω του συνδέτη(linker) και καταλήγουμε στη μορφή ενός εκτελέσιμου αρχείου (a.out).
Εκτελούμε το πρόγραμμά μας πληκτρολογώντας το όνομα του εκτελέσιμου αρχείου.
Έστω το παρακάτω στο αρχείο test.c:
#include<stdio.h>
main()
{
printf(“Ena poly aplo C-programma.\n”);
}
Το πρόγραμμα είναι γνωστό και ως “πηγαίος κώδικας”(source code) ενώ το αρχείο στο οποίο αποθηκεύεται ονομάζεται “πηγαίο αρχείο” (source file).
Για να δημιουργήσουμε εκτελέσιμο αρχείο με χρήση του μεταγλωττιστή cc του UNIX:
Cc test.c
Αν δεν υπήρχαν σφάλματα στο πρόγραμμά μας τότε το αποτέλεσμα είναι να δημιουργηθεί ένα εκτελέσιμο αρχείο με όνομα a.out. Πληκτρολογώντας τώρα
a.out
Θα εμφανισθεί στην οθόνη του υπολογιστή μας το:
Ena poly aplo C-programma.
Πριν από κάθε C-πρόγραμμα εμφανίζονται οδηγίες προς τον μεταγλωττιστή μέσω του C-προεπεξεργαστή (C-preprocessor). Η παραπάνω οδηγία υποχρεώνει τον C-μεταγλώττιστή να διαβάσει και να μεταγλωττίσει το αρχείο επικεφαλίδας (header file) stdio.h που έχει σχέση με τη βιβίοθήκη Εισόδου/Εξόδου στην οποία βρίσκεται η συνάρτηση printf().
Ένα C-πρόγραμμα αποτελείται από μια ή περισσότερες συναρτήσεις. Η βασική συνάρτηση που υπάρχει σε κάθε C-πρόγραμμα είναι η main(). Μέσα στις παρενθέσεις τοποθετούνται τα ορίσματα (arguments) τις συνάρτησης. Οι παρενθέσεις πρέπει πάντα να υπάρχουν ακόμη και αν δεν υπάρχουν ορίσματα. Ότι υπάρχει ανάμεσα στα άγκιστρα {}, αποτελεί το σώμα της συνάρτησης.
printf(“Ena poly aplo C-programma.\n”);
Η γραμμή αυτή αποτελεί μια δήλωση (statement) που καταλήγει (όπως άλλωστε όλες οι δηλώσεις της C) στο σύμβολο ʽ;ʼ. Η δήλωση αυτή είναι στην ουσία μια κλήση της συνάρτησης βιβλιοθήκης printf() με όρισμα τη συμβολοσειρά (δηλαδή, την ακολουθία χαρακτήρων) “Ena poly aplo C-programma.\n”. Οι συμβολοσειρές πρέπει να περικλείονται από διπλά εισαγωγικά. Ο ειδικός χαρακτήρας ʽ\nʼ ανήκει στις λεγόμενες ακολουθίες διαφυγής (escape sequences) και ονομάζεται χαρακτήρας νέας γραμμής (newline character). Το αποτέλεσμα αυτής της δήλωσης είναι να εμφανισθεί στην οθόνη το
Ena poly aplo C-programma.
Με τον δρομέα (Cursor) να τοποθετείται στην αρχή της επόμενης γραμμής.
Spoiler
Askisi_1 /*
συνένωση δύο συμβολοσειρών-1η έκδοση σελ. 144 */
#include<stdio.h>
char f (
char pinax[],
int p,
char matrix[],
int q,
char mat[])
{
int i,j;
for (i=
0 ;i<p;++i)
mat
=pinax;
for (j=0 ;j<q;++j)
mat[p+j]=matrix[j];
}
main()
{
int i;
char a[19 ];
static char b[6 ]="h zwh";
static char c[13 ]=" kai h texni";
f (b,6 ,c,13 ,a);
for (i=0 ;i<19 ;++i)
printf("%c ",a);
printf("\n ");
return 0 ;
}
Askisi_2 /*συνάρτηση μέτρησης του μήκους συμβολοσειράς σελ. 146 */
#include<stdio.h>
int mikos_sym_seiras (char symvoloseira[])
{
int i;
i=0 ;
while (symvoloseira!='\0' )
++i;
return (i);
}
main()
{
static char a[]="ELLAS";
static char b[]="FWS";
printf("h lexi *ellas* exei %d grammata\n ",mikos_sym_seiras (a));
printf("h lexi *fws* exei %d grammata\n ",mikos_sym_seiras (b));
}
Askisi_3 /* συνάρτηση μέτρησης του μήκους δυο οποιονδήποτε συμβολοσειρών */
#include<stdio.h>
int mikos_sym_seiras (char symvoloseira[])
{
int i;
i=0 ;
while (symvoloseira!='\0')
++i;
return (i);
}
main()
{
char a[100 ];
char b[100 ];
printf("dose ena string:");
scanf("%s ",a);
printf("dose ena string:");
scanf("%s ",b);
printf("h lexi %s exei %d grammata\n ",a,mikos_sym_seiras (a));
printf("h lexi %s exei %d grammata\n ",b,mikos_sym_seiras (b));
}
Askisi_4 /*συνάρτηση ελέγχου ισότητας δύο συμβολοσειρών σελ. 150 */
#include<stdio.h>
int iso_sym (char sym1[],char sym2[])
{
int i,simaia;
i=0 ;
while (sym1== sym2&& sym1!='\0'&& sym2!='\0' )
++i;
if (sym1[i]=='\0 '&&sym2== '\0 ')
simaia=1 ;
else
simaia=0 ;
return (simaia);
}
main()
{
static char sym_seira1[]="kalh tyxh";
static char sym_seira2[]="kalh";
printf("%d\n ",iso_sym (sym_seira1,sym_seira1));
printf("%d\n ",iso_sym (sym_seira1,sym_seira2));
printf("%d\n ",iso_sym (sym_seira1,"kalh tyxh"));
}
Askisi_5 /* συνάρτηση ελέγχου ισότητας δύο συμβολοσειρών-ver2 */
#include<stdio.h>
int iso_sym (char sym1[],char sym2[])
{
int i,simaia;
i=0 ;
while (sym1== sym2&& sym1!='\0 '&& sym2!='\0 ')
++i;
if (sym1== '\0 '&& sym2== '\0 ')
simaia=1 ;
else
simaia=0 ;
return (simaia);
}
main()
{
char sym_seira1[20 ];
char sym_seira2[20 ];
printf("Dose dyo strings:");
scanf("%s%s ",sym_seira1,sym_seira2);
if (iso_sym (sym_seira1,sym_seira2))
printf("Ta dyo strings einai isa");
else
printf("Ta dyo strings den einai isa");
}
Askisi_6 /*εισαγωγή συμβολοσειρών σελ . 152 */
#include<stdio.h>
main()
{
char string1[20 ],string2[20 ],string3[20 ];
printf("Keimeno pros eisagogi:");
scanf("%s%s%s ",string1,string2,string3);
printf("alfa1:%s\n alfa2:%s\n alfa3:%s\n ");
}
Askisi_7 /*Οι βασικές πράξεις(+,-,*,/) υλοποιούνται με συναρτήσεις */
#include<stdio.h>
float pros (float num1,float num2)
{
float apot;
apot=num1+num2;
return (apot);
}
float afer (float num1,float num2)
{
float apot;
apot=num1-num2;
return (apot);
}
float pol (float num1,float num2)
{
float apot;
apot=num1*num2;
return (apot);
}
float dier (float num1,float num2)
{
float apot;
apot=num1/num2;
return (apot);
}
main()
{
char praxi;
float a,b;
printf("Dose thn praxi:");
scanf("%c ",&praxi);
printf("Dose dyo arithmous:");
scanf("%f%f ",&a,&b);
switch (praxi)
{
case '+':printf("%f ",pros (a,b));
break ;
case '-':printf("%f ",afer (a,b));
break ;
case '*':printf("%f ",pol (a,b));
break ;
case '/':if (b== 0 )
printf("H dieresh einai adynath");
else
printf("%f ",dier (a,b));
break ;
default :
printf("Den edoses enan apo tous telestes +,-,*,/");
}
}
Askisi_8 /*Ένα απλό πρόγραμμα σε C με συνάρτηση */
//This is my first program in c
// university of piraeus
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void city_name (void );
main()
{
int i;
printf("This is my first program in c\n");
for (i=0 ;i<101 ;i++)
{
city_name() ;
}
getch() ;
}
void city_name()
{
printf("Piraeus");
}
Askisi_9 /* Ένα απλό πρόγραμμα σε C με συνάρτηση-ver2 */
//This is my first program in c
// university of piraeus
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void city_name()
{
printf("Piraeus");
}
main()
{
int i;
printf("This is my first program in c\n");
for (i=0 ;i<101 ;i++)
{
city_name() ;
}
getch() ;
}
Askisi_10 /* Οι βασικές πράξεις(+,-,*,/) υλοποιούνται με συναρτήσεις-ver2 */
#include<stdio.h>
#include<stdlib.h>
float pros (float num1,float num2);
float afer (float num1,float num2);
float pol (float num1,float num2);
float dier (float num1,float num2);
main()
{
char praxi;
float a,b;
printf("Dose thn praxi:");
scanf("%c ",& praxi);
printf("Dose dyo arithmous:");
scanf("%f%f ",& a,& b);
switch (praxi)
{
case '+':printf("%f ",pros (a,b));
break ;
case '-':printf("%f ",afer (a,b));
break ;
case '*':printf("%f ",pol (a,b));
break ;
case '/':if (b== 0 )
printf("H dieresh den einai dynath");
else
printf("%f ",dier (a,b));
break ;
default :
printf("Den edoses enan apo tous telestes +,-,*,/");
}
}
float pros (float num1,float num2)
{
float apot;
apot=num1+num2;
return (apot);
}
float afer (float num1,float num2)
{
float apot;
apot=num1-num2;
return (apot);
}
float pol (float num1,float num2)
{
float apot;
apot=num1*num2;
return (apot);
}
float dier (float num1,float num2)
{
float apot;
apot=num1/num2;
return (apot);
}
Askisi_11 /* πρόγραμμα υπολογισμού ενός αριθμού σε μία δύναμη-ver1 */
#include<stdio.h>
main()
{
int i,n,a,gin;
printf("Dose thn bash:");
scanf("%d ",& a);
printf("Dose ton ektheth:");
scanf("%d ",& n);
gin=1 ;
for(i=1 ;i<=n;i++)
gin=gin*a;
printf("%d\n ",gin);
}
Askisi_12 /*Πρόγραμμα υπολογισμού ενός αριθμού σε μία δύναμη με χρήση συνάρτησης-ver2 */
#include<stdio.h>
int power (int a,int n);
main()
{
int b,e;
printf("Dose thn bash:");
scanf("%d ",& b);
printf("Dose ton ektheth:");
scanf("%d ",& e);
printf("power(%d,%d)=%d ",b,e,power (b,e));
}
int power (int a,int n)
{
int gin,i;
gin=1 ;
for (i=1 ;i<=n;i++)
gin=gin*a;
return (gin);
}
Askisi_13 /*συνάρτηση υπολογισμού αθροισμάτων σελ. 103*/
#include<stdio.h>
int sum (int n);
main()
{
int plithos;
printf("Dose to plithos(n) ths akolouthias:");
scanf("%d ",& plithos);
printf("sum(1+2+3+...+%d )=%d ",plithos,sum (plithos));
return 0 ;
}
int sum (int n)
{
int athrisma=0 ,i;
for (i=1 ;i<=n;i++)
athrisma=athrisma+i;
return (athrisma);
}
Askisi_14 /*Συνάρτηση υπολογισμού απόλυτης τιμής αριθμού σελ. 109 */
#include<stdio.h>
float abs (float a);
main()
{
float num;
printf("Dose enan arithmo:");
scanf("%f ",& num);
printf("abs (%f )=%f ",num,abs (num));
return 0 ;
}
float abs (float a)
{
if (a<0 )
a=-a;
return (a);
}
Askisi_15 /*ΜΚΔ(α,β) με χρήση συνάρτησης σελ. 107 */
#include<stdio.h>
int mkd (int a,int b);
main()
{
int num1,num2;
printf("Dose dyo arithmous:");
scanf("%d%d ",& num1,& num2);
printf("mkd (%d ,%d )=%d ",num1,num2,mkd (num1,num2));
return 0 ;
}
int mkd (int a,int b)
{
int i;
while (b!=0 )
{
i=a% b;
a=b;
b=i;
}
return (a);
}
Askisi_16
/* ακολουθία Fibonacci:οι 9 πρώτοι όροι της σελ. 85 */
#include<stdio.h>
main()
{
int i,fib[9 ],x[9 ];
char f[9 ];
fib[0 ]=0 ;
fib[1 ]=1 ;
x[fib[0 ]]=0 ;
x[fib[1 ]]=1 ;
for (i=2 ;i<9 ;i++)
{
fib=fib[i-2 ]+fib[i-1 ];
x=fib;
}
f[0 ]='F';
f[1 ]='i';
f[2 ]='b';
f[3 ]='o';
f[4 ]='n';
f[5 ]='a';
f[6 ]='c';
f[7 ]=f[6];
f[8 ]=f[1];
printf("oi 9 protoi oroi ths akolouthias ");
for (i=0 ;i<=8 ;++i)
printf("%c ",f);
printf("\n\n");
for (i=0 ;i<9 ;++i)
{
if (i== 0 || i== 1 )
printf("%d \n",x[fib]);
else
printf("%d \n",x);
}
}
Οι 9 πρώτοι όροι της ακολουθίας Fibonacci
0
1
1
2
3
5
8
13
21
Askisi_17
Δίνονται δύο ταξινομημένοι κατά αύξουσα σειρά μονοδιάστατοι πίνακες, ακεραίων αριθμών. Να γραφεί πρόγραμμα το οποίο να συγχωνεύει τους δύο πίνακες σε ένα τρίτο ο οποίος να είναι επίσης ταξινομημένος κατά αύξουσα σειρά. Οι δύο αρχικοί πίνακες δεν μπορούν να περιέχουν περισσότερα από 100 στοιχεία ο καθένας.
Η συγχώνευση είναι μία βασική λειτουργία των πινάκων και γενικότερα των δομών δεδομένων. Στη συνέχεια δίνεται ένας πολύ απλός αλγόριθμος συγχώνευσης δύο ταξινομημένων πινάκων σε ένα τρίτο ταξινομημένο πίνακα.
Θεωρείται ότι στην είσοδο του αλγορίθμου συγχώνευσης δίνονται δύο ταξινομημένοι, κατά αύξουσα σειρά, πίνακες Α και Β, μεγέθους Ν και Μ στοιχείων αντίστοιχα, ενώ στην έξοδο προκύπτει ένας τρίτος πίνακας Γ με Ν+Μ ταξινομημένα στοιχεία επίσης κατά αύξουσα σειρά.
Στο πρόγραμμα Συγχώνευση που ακολουθεί οι μεταβλητές I, j και k είναι δείκτες για την κίνηση μέσα στους πίνακες Α,Β και Γ. Η μέθοδος προχωρεί ως εξής:
Το μικρότερο στοιχείο από τους πίνακες Α και Β τοποθετείται στον πίνακα Γ με ταυτόχρονη αύξηση του αντίστοιχου δείκτη. Η διαδικασία αυτή επαναλαμβάνεται μέχρις ότου τελειώσουν τα στοιχεία του ενός πίνακα.
Στη συνέχεια τα υπόλοιπα στοιχεία του άλλου πίνακα μεταφέρονται στον πίνακα Γ.
Merge Array 1 (Δεν χρησιμοποιείται η babble sort )
Απάντηση_1 :
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int a[100 ],b[100] ,c[200 ],i,j,k,l,n,m;
printf("Dose to megethos tou pinaka A:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("Dose to soixeio %d ",i);
scanf("%d",&a);
}
printf("Dose to megethos tou pinaka b:");
scanf("%d",&m);
for (j=1;j<=m;j++)
{
printf("Dose to soixeio %d ",j);
scanf("%d",&b[j]);
}
i=1 ;
j=1 ;
k=1 ;
while ((i<=n)&& (j<=m))
{
if (a<b[j])
{
c[k]=a;
k=k+1;
i=i+1;
}
else
{
c[k]=b[j];
k=k+1;
j=j+1;
}
}
if (i>n)
for (l=k;(l=k)<=n+m;k++)
{
c[l]=b[j];
j=j+1;
}
else
for (l=k;(l=k)<=n+m;k++)
{
c[l]=a;
i=i+1;
}
for (l=1;l<=n+m;l++)
printf("%d\n ",c[l]);
return 0 ;
}
Merge Array 2 ( χρησιμοποιείται η babble sort )
Πιο ολοκληρωμένο πρόγραμμα σε σχέση με το προηγούμενο πρόγραμμα
Απάντηση_2 :
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int a[100 ],b[100 ],c[200 ],i,j,k,l,n,m,temp;
printf("Dose to megethos tou pinaka A:"); //Megethos pinaka A
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("Dose to soixeio %d ",i);
scanf("%d",&a); //Gemisma pinaka A
}
for (i=1;i<=n-1;i++) //Taxinomisi pinaka A
for (j=1;j<=n-1;j++)
if (a[j+1]<a[j])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
for (i=1;i<=n;i++)
printf("%d\n",a); //Ektyposi taxinomimenou pinaka A
printf("Dose to megethos tou pinaka b:"); //Megethos pinaka b
scanf("%d",&m);
for (j=1;j<=m;j++)
{
printf("Dose to soixeio %d ",j);
scanf("%d",&b[j]); //Gemisma pinaka B
}
for (i=1;i<=n-1;i++) //Taxinomisi pinaka b
for (j=1;j<=n-1;j++)
if (b[j+1]<b[j])
{
temp=b[j+1];
b[j+1]=b[j];
b[j]=temp;
}
for (i=1;i<=n;i++)
printf("%d\n",b); //Ektyposi taxinomisis pinaka B
i=1 ;
j=1 ;
k=1 ;
while ((i<=n)&& (j<=m))
{
if (a<b[j])
{
c[k]=a;
k=k+1;
i=i+1;
}
else
{
c[k]=b[j];
k=k+1;
j=j+1;
}
}
if (i>n)
for (l=k;(l=k)<=n+m;k++)
{
c[l]=b[j];
j=j+1;
}
else
for (l=k;(l=k)<=n+m;k++)
{
c[l]=a;
i=i+1;
}
for (l=1;l<=n+m;l++)
printf("%d\n ",c[l]);
return 0 ;
}
Askisi_18
/*Max και min σε μονοδιάστατο πίνακα*/
#include<stdio.h>
main()
{
int a[100 ];
int i,megethos,max,thesi_max,min,thesi_min;
printf("Dose to megethos tou pinaka A:");
scanf("%d ",& megethos);
for (i=1 ;i<=megethos;++i)
{
printf("Dose to stoixeio i=%d :",i);
scanf("%d",&a);
}
max=a[1 ];
min=a[1 ];
thesi_max=1 ;
thesi_min=1 ;
for (i=2 ;i<=megethos;++i)
{
if (a>max)
{
max=a;
thesi_max=i;
}
else if (a<min)
{
min=a;
thesi_min=i;
}
}
printf("max=%d \n",max);
printf("thesi_max=%d \n",thesi_max);
printf("min=%d \n",min);
printf("thesi_min=%d \n",thesi_min);
return 0 ;
}
Askisi_19
*/Χρήση μιας αναδρομικής συνάρτησης-Υπολογισμός του παραγοντικού-σελ. 120 */
#include<stdio.h>
long int parag(int n);
main()
{
int num;
printf("Dose enan arithmo:");
scanf("%d ",& num);
printf("%d !=%d ",num,parag(num));
return 0 ;
}
long int parag(int n)
{
long int apot;
if (n== 0 )
apot=1 ;
else
apot=parag(n-1 )*n;
return (apot);
}
Askisi_20 */Χρήση μιας αναδρομικής συνάρτησηs-Υπολογισμός n-οστού όρου Fibonacci*/
#include<stdio.h>
int fib(int n);
main()
{
int i,n;
printf("Dose to n:");
scanf("%d ",&n);
printf("Oi %d protoi oroi ths akolouthias fibonacci \n",n);
for (i=0 ;i<n;++i)
printf("%d \n",fib(i));
return 0 ;
}
int fib(int n)
{
int oros;
if (n<=1 )
oros=n;
else
oros=fib(n-2 )+fib(n-1 );
return (oros);
}
Askisi_21 /*Ο υπολογισμός του παραγοντικού χωρίς αναδρομική συνάρτηση */
#include<stdio.h>
main()
{
int i,num;
long int parag;
printf("Dose enan arithmo:");
scanf("%d ",&num);
parag=1 ;
for(i=2 ;i<=num;++i)
parag=parag*i;
printf("%d !=%d ",num,parag);
}
Askisi_22 /*Συχνότητα αριθμού σε μονοδιάστατο πίνακα */
#include<stdio.h>
main()
{
int x[100 ];
int i,s,pro_num,n;
printf("Dose to megethos tou pinaka:");
scanf("%d ",&n);
for (i=1 ;i<=n;++i)
{
printf("Dose to stoixeia %d :",i);
scanf("%d ",&x);
}
i=1 ;
s=0 ;
pro_num=x;
while (i<=n)
{
if (pro_num!= x)
{
printf("Arithmos %d \n Syxnotita %d \n",pro_num,s);
pro_num=x;
s=0 ;
}
s=s+1 ;
i=i+1 ;
}
printf("Arithmos %d \n Syxnotita %d \n",pro_num,s);
return 0 ;
}
π.χ
χ={1 ,1 ,2 ,2 ,9 }
Askisi_23 /*Εκμάθηση αριθμών από το 1 έως το 9 */
#include<stdio.h>
main()
{
char x[9 ];
int num;
x[1 ]='E';
x[2 ]='D';
x[3 ]='T';
x[4 ]='T';
x[5 ]='P';
x[6 ]='E';
x[7 ]='E';
x[8 ]='O';
x[9 ]='E';
printf("Dose enan arithmo apo to 1 ews to 9 :");
scanf("%d ",&num);
while (num>0 && num<=9 )
{
printf("%c \n",x[num]);
printf("Dose enan arithmo apo to 1 ews to 9 :");
scanf("%d ",&num);
}
return 0 ;
}
Askisi_ 24 /*Bubble sort */
#include<stdio.h>
main()
{
int x[100 ];
int n,i,j,temp;
printf("Dose to megethos tou pinaka X:");
scanf("%d",&n);
for (i=1 ;i<=n;++i)
{
printf("Dose to stoixeio %d:",i);
scanf("%d",&x);
}
for (i=1 ;i<=n-1 ;++i)
for (j=1 ;j<=n-1 ;++j)
if (x[j+1]<x[j])
{
temp=x[j+1 ];
x[j+1 ]=x[j];
x[j]=temp;
}
for (j=1 ;j<=n;++j)
printf("%d\n",x[j]);
return 0 ;
}
Askisi_25 /* Πρόγραμμα υπολογισμού ενός αριθμού σε μία δύναμη με χρήση συνάρτησης ver-3 */
#include<stdio.h>
float power(int a,int n);
main()
{
int b,e;
printf("Dose thn basi kai ton ektheti:");
scanf("%d%d",&b,&e);
printf("%d^%d=%f ",b,e,power(b,e));
return 0 ;
}
float power(int a,int n)
{
int i;
float c;
c=1.000000 ;
if (n>0 )
for (i=1 ;i<=n;++i)
c=c*a;
else
{
for (i=1 ;i<=-n;++i)
c=c*a;
c=1 /c;
}
return (c);
}
Askisi_26 /*Υπολογισμός Αριθμού συνδυασμών (n k)=n!/k!(n-k)!
*/
#include<stdio.h>
long int parag(int n);
main()
{
int i,n,k,combination;
long int a,b;
printf("Dose to n:");
scanf("%d",&n);
printf("Dose to k:");
scanf("%d",&k);
a=1 ;
for (i=n;i>=n-k+1 ;--i)
a=a*i;
b=parag(k);
combination=a/b;
printf("%d",combination);
return 0 ;
}
long int parag(int n)
{
long int apot;
if (n== 0 )
apot=1 ;
else
apot=parag(n-1 )*n;
return (apot);
}
Askisi 27 /*quick sort(Ο αλγόριθμος quick sort ειναι αναδρομικός(recursive))*/
#include<stdio.h>
/*Ταξινόμηση πινάκων
ταξινόμηση με διαμέριση(quick sort)
Ιδέα:
διάλεξε ένα τυχαίο στοιχείο χ του πίνακα
διαμέρισε τον πίνακα, μεταφέροντας:
-τα στοιχεία μικρότερα του χ στην αρχή
-τα στοιχεία μεγαλύτερα του χ στο τέλος
αναδρομικά ταξινόμησε τα δύο μέρη
κόστος: Ο(n^2) στη χειρότερη περίπτωση
Ο(nlogn) κατά μέσο όρο*/
void qsort(int a[],int n);
void qsort_auxil(int a[],int lower,int upper);
int main()
{
int a[100];
int i,n;
printf("Dose to megethos tou pinaka:");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("Dose to stoixeio a[%d]:",i);
scanf("%d",&a);
}
qsort(a,n);
for (i=0;i<n;i++)
printf("%d\n",a);
return 0 ;
}
void qsort(int a[],int n)
{
qsort_auxil(a,0 ,n-1);
}
void qsort_auxil(int a[],int lower,int upper)
{
if (lower<upper)
{
int x=a[(lower+upper)/2];
int i,j;
for (i=lower,j=upper;i<=j;i++,j--)
{
while (a<x) i++;
while (a[j]>x) j--;
if (i<=j)
{
int temp=a;
a=a[j];
a[j]=temp;
}
}
qsort_auxil(a,lower,j);
qsort_auxil(a,i,upper);
}
}
Εισόδος: 10 9 8 7 6 5 4 3 2 1
Εξοδος: 1 2 3 4 5 6 7 8 9 10(Κατά αύξουσα σειρά ταξινομημένα.)
Askisi_28/*linear_search*/
#include<stdio.h>
/*1)
Δεδομένα Εισόδου :
Πίνακας X με n στοιχεία, ταξινομημένος από το μικρότερο στο μεγαλύτερο, και ακέραιος k.
2)
Στόχος :
Να εξακριβώσουμε αν το k είναι στοιχείο του X.
3)
Γραμμική Διερεύνηση :
Εξερευνούμε τον πίνακα από τα αριστερά στα δεξιά.
*/
int linear_search(int x[],int n,int k);
int main()
{
int x[100 ];
int i,n,number;
printf("Dose to megethos tou pinaka X:");
scanf("%d",&n);
for (i=1 ;i<=n;i++)
{
printf("Dose to stoixeio X[%d]:",i);
scanf("%d",&x);
}
printf("Dose ton arithmo pros anazitisi ston pinaka X:");
scanf("%d",&number);
if (linear_search(x,n,number))
printf("O arithmos %d brethike sti thesi %d tou pinaka X\n",number,linear_search(x,n,number));
else
printf("O arithmos %d den brethike.\n",number);
return 0 ;
}
int linear_search(int x[],int n,int k)
{
int i=1 ;
int thesi=0 ;
int flag=0 ;
while ((flag==0 )&& (i<=n))
{
if (x== k)
{
flag=1 ;
thesi=i;
}
else
i++;
}
return (thesi);
}
Askisi_29 /*binary_search*/
#include<stdio.h>
/*Δυαδική αναζήτηση: βρίσκουμε το μέσο του πίνακα και αποφασίζουμε αν το k ανήκει στο δεξιό ή το αριστερό μισό. Επαναλαμβάνουμε την ίδια διαδικασία στο “μισό” που μας ενδιαφέρει.*/
int binary_search(int x[],int n,int k);
int main()
{
int x[100];
int i,n,number;
printf("Dose to megethos tou pinaka X:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("Dose to stoixeio X[%d]:",i);
scanf("%d",&x);
}
printf("Dose ton arithmo pros anazitisi ston pinaka X:");
scanf("%d",&number);
if (binary_search(x,n,number)==-1)
printf("O arithmos %d den brethike\n",number);
else
printf("O arithmos %d brethike sti thesi %d\n",number,binary_search(x,n,number));
return 0 ;
}
int binary_search(int x[],int n,int k)
{
int low=1,high=n;
int mid;
while (low<=high)
{
mid=(high+low)/2;
if (x[mid]<k) low=mid+1;
else
if (x[mid]>k) high=mid-1;
else return mid;
}
return -1;
}