teo
Πολύ δραστήριο μέλος


- H C δημιουργήθηκε το 1972 στα Bell Labs από τον Dennis Ritchie καθώς, μαζί με τον Ken Thompson, σχεδίαζαν το λειτουργικό σύστημα UNIX. Στην ουσία, η C προήλθε από την γλώσσα B που είχε επινοήσει ο Thompson.
- Αν και οι περισσότερες γλώσσες στοχεύουν στο να είναι χρήσιμες, συχνά επινοούνται και για άλλους λόγους. Για παράδειγμα, η Pascal σχεδιάσθηκε κυρίως για εκπαιδευτικούς σκοπούς(διδασκαλία αρχών προγραμματισμού) ενώ η BASIC σχεδιάσθηκε ως μια φιλική γλώσσα που μαθαίνεται εύκολα ακόμη και αν δεν υπάρχει εξοικείωση με τους Η/Υ.
- Σε αντίθεση με τα παραπάνω, η 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 είναι μια φιλική δομημένη γλώσσα που ενθαρρύνει τις καλές προγραμματιστικές συνήθειες
- Χρησιμοποιούμε έναν συντάκτη (editor) για να γράψουμε το πρόγραμμά μας σε ένα ʽ.cʼ αρχείο.
- Υποβάλουμε το πρόγραμμά μας σε μεταγλώττιση χρησιμοποιώντας τον φιλικό μεταγλωττιστή (compiler) της C. Ο μεταγλωττιστής αρχικά θα ελέγξει το πρόγραμμά μας για πιθανά συντακτικά και σημασιολογικά σφάλματα. Αν δεν βρει σφάλματα, θα μεταφράσει το πρόγραμμα σε συμβολική γλώσσα και ο συμβολομεταφραστής θα δημιουργήσει ένα παράγωγο πρόγραμμα (object program) σε ʽ.οʼ αρχείο.
- Στη συνέχεια, γίνεται η σύνδεση του παράγωγου προγράμματός μας με άλλα παράγωγα προγράμματα καθώς και με τις βιβλιοθήκες του συστήματος μέσω του συνδέτη(linker) και καταλήγουμε στη μορφή ενός εκτελέσιμου αρχείου (a.out).
- Εκτελούμε το πρόγραμμά μας πληκτρολογώντας το όνομα του εκτελέσιμου αρχείου.
#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.
- #include<stdio.h>
- main()
- printf(“Ena poly aplo C-programma.\n”);
Ena poly aplo C-programma.
Με τον δρομέα (Cursor) να τοποθετείται στην αρχή της επόμενης γραμμής.
#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\nalfa2:%s\nalfa3:%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;
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder


Αν όχι, πρέπει να βάλεις πηγή.
Επίσης, ίσως θα ήταν καλύτερο και πιο ξεκούραστο, αντί να αναφέρεις ορισμένες ασκήσεις μαζί με τις λύσεις τους, να δίνεις πχ μια κάθε εβδομάδα και να γίνεται σαν "διαγωνισμός" για τη λύση της! Έτσι πιστεύω θα είναι πιο χρήσιμο και πιο διασκεδαστικό, ενώ τώρα δύσκολα θα διαβάσει κάποιος όλο αυτό μονομιάς.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


Οι πληροφοριες(η ιστορια της C) για τη C ειναι απο το TEI αθηνας του τμηματος πληροφορικης απο καποιες διαφανειες που βρισκονται στην διευθυνση ECLASS.CS.TEIATH.GR
σορι αλλα δεν εχω το χρονο για να τις παρουσιασω μια καθε εμβδομαδα. καλυτερα για μενα να τις παρουσιασω μονομιας.
Θα βαλω και αλλες ασκησεις αμα εχω το χρονο!
Αυτες οι ασκησεις θα εχουν να κανουν με αρχεια και δομες.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
pantelis1992
Νεοφερμένο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος


hint: Ψάξε για τον τύπο δεδομένων static.Λοιπον παιδια μια ερωτηση για τη c.εκανα μια αναδρομικη συναρτηση (για τους αριθμους fibonachi)και θελω να βαλω εναν μετρητη οχι στη main αλλα στη συναρτηση fib για να μετρησω ποσες φορες εγινε η αναδρομικη κλιση(αναλογα με τον αριθμο που βαζουμε καθε φορα δλδ).Καμια βοηθεια??

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
pantelis1992
Νεοφερμένο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος


Και που δεν το έχετε μάθει, τι σημαίνει;thanks θα το ψαξω αν και ακομα δεν καναμε τιποτα τετοιο ουτε στη θεωρια ουτε στο εργασηριο οποτε λογικα θα θελει αλλη λυση αλλα καλυτερα κιολας να μαθαινω!TY
Κοίτα (υποθέτοντας ότι είσαι 1ο έτος Γ' βάθμιας εκπαίδευσης) .... Είσαι στο 1ο έτος, όχι στην Δ' Λυκείου, οπότε μην μένεις στο τι σου έχουν δείξει. Ειδικά στον προγραμματισμό δεν υπάρχει "δεν μας το έχουν διδάξει".
Και απ' όσο ξέρω, αν θες να το κάνεις μέσα στη συνάρτηση, πρέπει να χρησιμοποιήσεις κάποιο τέτοιο τύπο. Αλλιώς global variables, που είναι ΚΑΚΗ προγραμματιστική τεχνική.
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
antwwwnis
Διάσημο μέλος


Στους ΗΜΜΥ τυχαίνει καμιά φορά να χρειάζονται να γράψουν σε γλώσσα που δεν την έχουν διδαχθεί πουθενά;Και που δεν το έχετε μάθει, τι σημαίνει;
Κοίτα (υποθέτοντας ότι είσαι 1ο έτος Γ' βάθμιας εκπαίδευσης) .... Είσαι στο 1ο έτος, όχι στην Δ' Λυκείου, οπότε μην μένεις στο τι σου έχουν δείξει. Ειδικά στον προγραμματισμό δεν υπάρχει "δεν μας το έχουν διδάξει".
Και απ' όσο ξέρω, αν θες να το κάνεις μέσα στη συνάρτηση, πρέπει να χρησιμοποιήσεις κάποιο τέτοιο τύπο. Αλλιώς global variables, που είναι ΚΑΚΗ προγραμματιστική τεχνική.

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος


Φυσικά. Ξέρεις σε πόσα μαθήματα δίνονται εργασίες σε Java, αλλά Java δεν διδάσκεται πρακτικά πουθενά;Στους ΗΜΜΥ τυχαίνει καμιά φορά να χρειάζονται να γράψουν σε γλώσσα που δεν την έχουν διδαχθεί πουθενά;![]()
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Speedy
Δραστήριο μέλος


int fib1(int n,int counter) {
counter++;
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
return fib1(n - 1, counter) + fib1(n - 2,counter);
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Θα περνάς σαν παράμετρο στην συνάρτηση τον μετρητή αν δεν θες να χρησιμοποιήσεις global static μεταβλητή που σου πρότεινε ο Γιώργος, δηλαδή:
Code:int fib1(int n,int counter) { counter++; if (n == 0) { return 0; } if (n == 1) { return 1; } return fib1(n - 1, counter) + fib1(n - 2,counter); }
Δε θα δουλέψει αυτό με τον counter όπως το έχεις κάνει γιατί η συνάρτηση καλεί αναδρομικά 2 φορές τον εαυτό της και έτσι δημιουργούνται πολλά παρακλάδια με διαφορετικά instances του counter.
Επίσης αυτό που πρότεινε ο Γιώργος είναι εσωτερική στη συνάρτηση static μεταβλητή, όχι global.
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
@nn@
Νεοφερμένο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


Τα χρησιμοποιουμε για εισαγωγή δεδομένων οταν εκτελούμε το πρόγραμμα απο τη γραμμή εντολών..
Για να εκτελέσουμε το πρόγραμμα με όνομα esteki.exe γραφουμε:
esteki.exe παραμετρος1 παράμετρος2
οι παράμετροι χωρίζοντε με κενό και μπορουμε να βάλουμε ότι θέλουμε σε αυτούς.
Στο argc αποθηκέυετε το σύνολο τον παραμέτρων +1 για το όνομα του αρχείου(και αυτό παράμετρος είναι) π.χ. αν δώσαμε 2 παραμέτρους το argc γίνετε 3.
Το argv είναι ένας πίνακας δεικτών τύπου char.Έκει αποθηκεύονται οι παράμετροι που δώσαμε στο *argv[0] είναι το όνομα του αρχείου στο *argv[1] είναι η παράμετρος1 στο *argv[2] είναι η παράμετρος2 κλπ...
αν δώσουμε: esteki.exe party 2012
*argv[0]=="esteki.exe"
*argv[1]=="party"
*argv[2]=="2012"
(ξέρεις πως δουλεύει ο πίνακας δεικτών ε; )
Το χρησιμοποιούμε για γρήγορη εισαγωγή δεδομένων..να μην μας ρωτάει συνέχεια δώσε το ένα δώσε το άλλο..δες και εδώ
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
@nn@
Νεοφερμένο μέλος


main(int argc ,char *argv[])
Τα χρησιμοποιουμε για εισαγωγή δεδομένων οταν εκτελούμε το πρόγραμμα απο τη γραμμή εντολών..
Για να εκτελέσουμε το πρόγραμμα με όνομα esteki.exe γραφουμε:
esteki.exe παραμετρος1 παράμετρος2
οι παράμετροι χωρίζοντε με κενό και μπορουμε να βάλουμε ότι θέλουμε σε αυτούς.
Στο argc αποθηκέυετε το σύνολο τον παραμέτρων +1 για το όνομα του αρχείου(και αυτό παράμετρος είναι) π.χ. αν δώσαμε 2 παραμέτρους το argc γίνετε 3.
Το argv είναι ένας πίνακας δεικτών τύπου char.Έκει αποθηκεύονται οι παράμετροι που δώσαμε στο *argv[0] είναι το όνομα του αρχείου στο *argv[1] είναι η παράμετρος1 στο *argv[2] είναι η παράμετρος2 κλπ...
αν δώσουμε: esteki.exe party 2012
*argv[0]=="esteki.exe"
*argv[1]=="party"
*argv[2]=="2012"
(ξέρεις πως δουλεύει ο πίνακας δεικτών ε; )
Το χρησιμοποιούμε για γρήγορη εισαγωγή δεδομένων..να μην μας ρωτάει συνέχεια δώσε το ένα δώσε το άλλο..δες και εδώ
Ναι ξέρω πως δουλεύδουν οι πίνακες δικτών ευχαριστώ πολύ για την απάντηση είναι πολύ διευκρινιστική!!!

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
@nn@
Νεοφερμένο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος


Δεν υπάρχει κάτι τέτοιο βασικά. Το float και το char είναι απλά πώς εσύ θα "διαβάσεις" τα δεδομένα σου και θα τα ερμηνεύσεις.Μπορεί κάποιος να μου δώσει μια ιδέα για το πώς να ελέγχω αν τα στοιχεία που δίνει ο χρήστης είναι float ή char προσπάθησα να το κάνω με scanf αλλά δεν δουλεύει και έχω κολλήσει.
Με άλλα λόγια, όταν περιμένεις ένα δεδομένο Χ, που μπορεί να ανήκει είτε σε έναν τύπο Α, είτε σε έναν τύπο Β, τότε ο καλύτερος χειρισμός είναι να χρησιμοποιήσεις τον τύπο που καλύπτει και τα δύο και να πράττεις ανάλογα.
Πχ, αν περιμένεις είτε ακέραιους είτε πραγματικούς, τότε αποθηκεύεις αρχικά τα δεδομένα σου ως "πραγματικούς" κι από εκεί εξετάζεις τι είναι.
Αντίστοιχα, αν περιμένεις float η char, το καλύτερο θα ήταν να διαβάσεις char κι εκεί να δεις αν '0' <= x <= '9', φερ' ειπείν. Κοινώς, να αντιμετωπίσεις τους αριθμούς ως chars, αρχικά.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
@nn@
Νεοφερμένο μέλος


Δείτε τον κώδικα μηπως έχω κάνει βλακία.
main()
float *FltArray;
int t,Dimention;
Dimention=10;
FltArray=(float*)malloc(sizeof(float)*Dimention);
printf("Please insert the numbers");
for(count=0;count<Dimention;count++)
{
t=scanf("%f",&FltArray[count]);
if(t!=1)
{
printf("the value must be a float number");
t=scanf("%f",&FltArray[count]);
}
{
return 0;
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
@nn@
Νεοφερμένο μέλος


'
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Liakouras
Δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Guest 986132
Επισκέπτης


Τα προγραμματάκια είναι εξειδικευμένα για συγκεκριμένη χρήση. Αφού ξέρεις ότι έχεις να κάνεις πχ με ακεραίους, εγκλωβίζεις τον χρήστη σε μία do... while, έως ότου δώσει ακέραιο αριθμό. Βάζεις και μία printf, που να του λέει δώσει ακέραιο αριθμό και τελείωσες. Τώρα αν χρειαστεί μία διαίρεση ας πούμε, μπορείς με casting να πάρεις αυτό που θέλεις.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.