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

teo

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

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 37 ετών και επαγγέλεται Φοιτητής/τρια. Έχει γράψει 1,573 μηνύματα.
Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 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.

  • #include<stdio.h>
Πριν από κάθε C-πρόγραμμα εμφανίζονται οδηγίες προς τον μεταγλωττιστή μέσω του C-προεπεξεργαστή (C-preprocessor). Η παραπάνω οδηγία υποχρεώνει τον C-μεταγλώττιστή να διαβάσει και να μεταγλωττίσει το αρχείο επικεφαλίδας (header file) stdio.h που έχει σχέση με τη βιβίοθήκη Εισόδου/Εξόδου στην οποία βρίσκεται η συνάρτηση printf().

  • main()
Ένα 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) να τοποθετείται στην αρχή της επόμενης γραμμής.
ΑΠΛΑ ΠΡΟΓΡΑΜΜΑΤΑ ΣΕ C.​
Μερικες ασκήσεις στη C.
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\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}

Αριθμός
Συχνότητα αριθμού
1
2
2
2
9
1

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;
}
 

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

Επεξεργάστηκε από συντονιστή:

Subject to change

e-steki.gr Founder

Η Λία αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 37 ετών και επαγγέλεται Web developer. Έχει γράψει 15,891 μηνύματα.
Πολύ ενδιαφέρον το άρθρο, αλλά είναι δικό σου;
Αν όχι, πρέπει να βάλεις πηγή.
Επίσης, ίσως θα ήταν καλύτερο και πιο ξεκούραστο, αντί να αναφέρεις ορισμένες ασκήσεις μαζί με τις λύσεις τους, να δίνεις πχ μια κάθε εβδομάδα και να γίνεται σαν "διαγωνισμός" για τη λύση της! Έτσι πιστεύω θα είναι πιο χρήσιμο και πιο διασκεδαστικό, ενώ τώρα δύσκολα θα διαβάσει κάποιος όλο αυτό μονομιάς.
 

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

teo

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

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 37 ετών και επαγγέλεται Φοιτητής/τρια. Έχει γράψει 1,573 μηνύματα.
Ειναι καποιες ασκησεις που εχω κανει εγω για να μαθω καποια πραγματα στη C.

Οι πληροφοριες(η ιστορια της C) για τη C ειναι απο το TEI αθηνας του τμηματος πληροφορικης απο καποιες διαφανειες που βρισκονται στην διευθυνση ECLASS.CS.TEIATH.GR

σορι αλλα δεν εχω το χρονο για να τις παρουσιασω μια καθε εμβδομαδα. καλυτερα για μενα να τις παρουσιασω μονομιας.

Θα βαλω και αλλες ασκησεις αμα εχω το χρονο!
Αυτες οι ασκησεις θα εχουν να κανουν με αρχεια και δομες.
 

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

Τελευταία επεξεργασία:

pantelis1992

Νεοφερμένος

Ο pantelis1992 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 33 μηνύματα.
Λοιπον παιδια μια ερωτηση για τη c.εκανα μια αναδρομικη συναρτηση (για τους αριθμους fibonachi)και θελω να βαλω εναν μετρητη οχι στη main αλλα στη συναρτηση fib για να μετρησω ποσες φορες εγινε η αναδρομικη κλιση(αναλογα με τον αριθμο που βαζουμε καθε φορα δλδ).Καμια βοηθεια??
 

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

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Λοιπον παιδια μια ερωτηση για τη c.εκανα μια αναδρομικη συναρτηση (για τους αριθμους fibonachi)και θελω να βαλω εναν μετρητη οχι στη main αλλα στη συναρτηση fib για να μετρησω ποσες φορες εγινε η αναδρομικη κλιση(αναλογα με τον αριθμο που βαζουμε καθε φορα δλδ).Καμια βοηθεια??
hint: Ψάξε για τον τύπο δεδομένων static. :)
 

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

pantelis1992

Νεοφερμένος

Ο pantelis1992 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 33 μηνύματα.
thanks θα το ψαξω αν και ακομα δεν καναμε τιποτα τετοιο ουτε στη θεωρια ουτε στο εργασηριο οποτε λογικα θα θελει αλλη λυση αλλα καλυτερα κιολας να μαθαινω!TY
 

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

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
thanks θα το ψαξω αν και ακομα δεν καναμε τιποτα τετοιο ουτε στη θεωρια ουτε στο εργασηριο οποτε λογικα θα θελει αλλη λυση αλλα καλυτερα κιολας να μαθαινω!TY
Και που δεν το έχετε μάθει, τι σημαίνει;
Κοίτα (υποθέτοντας ότι είσαι 1ο έτος Γ' βάθμιας εκπαίδευσης) .... Είσαι στο 1ο έτος, όχι στην Δ' Λυκείου, οπότε μην μένεις στο τι σου έχουν δείξει. Ειδικά στον προγραμματισμό δεν υπάρχει "δεν μας το έχουν διδάξει".

Και απ' όσο ξέρω, αν θες να το κάνεις μέσα στη συνάρτηση, πρέπει να χρησιμοποιήσεις κάποιο τέτοιο τύπο. Αλλιώς global variables, που είναι ΚΑΚΗ προγραμματιστική τεχνική.
 

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

antwwwnis

Διάσημο μέλος

Ο Αντωωωνης αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Ηλεκτρολόγος μηχανικός και μας γράφει απο ΗΠΑ (Αμερική). Έχει γράψει 2,939 μηνύματα.
Και που δεν το έχετε μάθει, τι σημαίνει;
Κοίτα (υποθέτοντας ότι είσαι 1ο έτος Γ' βάθμιας εκπαίδευσης) .... Είσαι στο 1ο έτος, όχι στην Δ' Λυκείου, οπότε μην μένεις στο τι σου έχουν δείξει. Ειδικά στον προγραμματισμό δεν υπάρχει "δεν μας το έχουν διδάξει".

Και απ' όσο ξέρω, αν θες να το κάνεις μέσα στη συνάρτηση, πρέπει να χρησιμοποιήσεις κάποιο τέτοιο τύπο. Αλλιώς global variables, που είναι ΚΑΚΗ προγραμματιστική τεχνική.
Στους ΗΜΜΥ τυχαίνει καμιά φορά να χρειάζονται να γράψουν σε γλώσσα που δεν την έχουν διδαχθεί πουθενά;:hmm:
 

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

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Στους ΗΜΜΥ τυχαίνει καμιά φορά να χρειάζονται να γράψουν σε γλώσσα που δεν την έχουν διδαχθεί πουθενά;:hmm:
Φυσικά. Ξέρεις σε πόσα μαθήματα δίνονται εργασίες σε Java, αλλά Java δεν διδάσκεται πρακτικά πουθενά;
 

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

Speedy

Δραστήριο μέλος

Ο Speedy αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Αγρίνιο (Αιτωλοακαρνανία). Έχει γράψει 713 μηνύματα.
Θα περνάς σαν παράμετρο στην συνάρτηση τον μετρητή αν δεν θες να χρησιμοποιήσεις 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);
}
 

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

Επεξεργάστηκε από συντονιστή:

aergos

Δραστήριο μέλος

Ο aergos αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 410 μηνύματα.
Θα περνάς σαν παράμετρο στην συνάρτηση τον μετρητή αν δεν θες να χρησιμοποιήσεις 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.
 

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

Επεξεργάστηκε από συντονιστή:

@nn@

Νεοφερμένος

Η @nn@ αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 58 μηνύματα.
Γειά σας έχω μια απορία εδω και πόλυ καιρό. Μπορεί κάποιος να μου εξηγήσει τι είναι και σε τι χρησιμεύουν οι argc και argv που βαζουμε ως όρισμα στην main?
 

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

Πληροφορικάριος

Δραστήριο μέλος

Ο Πληροφορικάριος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Αθήνα (Αττική). Έχει γράψει 623 μηνύματα.
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"
(ξέρεις πως δουλεύει ο πίνακας δεικτών ε; )

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

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

@nn@

Νεοφερμένος

Η @nn@ αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 58 μηνύματα.
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"
(ξέρεις πως δουλεύει ο πίνακας δεικτών ε; )

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

Ναι ξέρω πως δουλεύδουν οι πίνακες δικτών ευχαριστώ πολύ για την απάντηση είναι πολύ διευκρινιστική!!! :)
 

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

Επεξεργάστηκε από συντονιστή:

@nn@

Νεοφερμένος

Η @nn@ αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 58 μηνύματα.
Μπορεί κάποιος να μου δώσει μια ιδέα για το πώς να ελέγχω αν τα στοιχεία που δίνει ο χρήστης είναι float ή char προσπάθησα να το κάνω με scanf αλλά δεν δουλεύει και έχω κολλήσει.
 

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

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Μπορεί κάποιος να μου δώσει μια ιδέα για το πώς να ελέγχω αν τα στοιχεία που δίνει ο χρήστης είναι float ή char προσπάθησα να το κάνω με scanf αλλά δεν δουλεύει και έχω κολλήσει.
Δεν υπάρχει κάτι τέτοιο βασικά. Το float και το char είναι απλά πώς εσύ θα "διαβάσεις" τα δεδομένα σου και θα τα ερμηνεύσεις.
Με άλλα λόγια, όταν περιμένεις ένα δεδομένο Χ, που μπορεί να ανήκει είτε σε έναν τύπο Α, είτε σε έναν τύπο Β, τότε ο καλύτερος χειρισμός είναι να χρησιμοποιήσεις τον τύπο που καλύπτει και τα δύο και να πράττεις ανάλογα.

Πχ, αν περιμένεις είτε ακέραιους είτε πραγματικούς, τότε αποθηκεύεις αρχικά τα δεδομένα σου ως "πραγματικούς" κι από εκεί εξετάζεις τι είναι.
Αντίστοιχα, αν περιμένεις float η char, το καλύτερο θα ήταν να διαβάσεις char κι εκεί να δεις αν '0' <= x <= '9', φερ' ειπείν. Κοινώς, να αντιμετωπίσεις τους αριθμούς ως chars, αρχικά.
 

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

@nn@

Νεοφερμένος

Η @nn@ αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 58 μηνύματα.
Αυτό που λές να τα διαβάζει ως χαρακτήρες το έχω κάνει αλλά μετα πρέπει να το μετατρέψεις σε float και αυτό δεν είναι τοσο εύκολο γιατι τον αριθμό που θα δώσει πχ 12,3 τον αποθηκεύεις σε πίνακα χαρακτήρων και κάθε ψηφίο θα πάρει ξεχωριστή θέση στον πίνακα. Αυτό που σκεφτόμουν είναι με την scanf η οποία γυρνάει 1 όταν ειναί επιτυχης η εισάφωγή του στοιχείου και 0 όταν δεν είναι αλλά δεν δουλεύει:
Δείτε τον κώδικα μηπως έχω κάνει βλακία.

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;
}
 

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

@nn@

Νεοφερμένος

Η @nn@ αυτή τη στιγμή δεν είναι συνδεδεμένη. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 58 μηνύματα.
Για την ακρίβεια αυτό που κάνει οταν βάζω χαρακτήρα είναι να βγάζει συνέχεια στην οθόνη "the value must be a float number"
'
 

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

Liakouras

Δραστήριο μέλος

Ο Liakouras αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 410 μηνύματα.
Πάντως μπορείς να κάνεις μετατροπή ενός char σε float με την χρήση της συνάρτησης atoi()
 

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

Guest 986132

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Δεν βλέπω καμιά αναγκαιότητα στον έλεγχο αυτού που δίνει ο χρήστης, με την έννοια που του δίνεις εσύ. Ένας καλός προγραμματιστής έχει πλήρη γνώση του τι έχει να κάνει και προσπαθεί να κάνει βέλτιστο το πρόγραμμά του. Τουτέστιν, είναι άσκοπο να βάζει συνθήκες και να κάνει ελέγχους, που δεν χρειάζονται ουσιαστικά.

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

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

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top