Προς το περιεχόμενο

1s_ Aσκηση _Project


y0rg0s

Προτεινόμενες αναρτήσεις

Δημοσ.

[/color]

Υπάρχουν δυο επιλογές ανόητε φοιτητή:

 

1. Στρώνεις τον κ... σου κάτω, διαβάζεις και κάνεις τις εργασίες σου και δεν γίνεσαι γελοίος στα forum

2. Πληρώνεις κάποιον και σου τις κάνει με ότι αρνητικό συνεπάγεται για το μέλλον σου

 

Προφανώς τον δικό σου χρόνο υποθετικά τον κοστολογείς πολύ ακριβά για να μην την κάνεις ο ίδιος! Έτσι δεν είναι; Εμείς λοιπόν γιατί να στο κάνουμε τσάμπα;

 

Γκέγκε;

 

Άντε καλά Χριστούγεννα! :-)

 

3. http://cm.bell-labs.com/cm/cs/cbook/

Δημοσ.

 

ενα βιβλιο που θα προτεινα είναι το C θεωρία και πράξη του καθηγητή Α. Τομαρά που ήταν αυτο που με έκανε να αγαπησω τη γλωσσα (μαζι με τις εντυπωσιακες παραδοσεις του). Δεν ξέρω όμως αν κυκλοφορει.

Δημοσ.

Κατάφερα και έλυσα το πρώτο!

>
#include <setjmp.h>
#include <stdio.h>

int digit(S)
char *S;
{ 
 static jmp_buf buf;
 int ret;
 if (ret = setjmp(buf))
   return ret; 
 if((S[0] == 'o') && (S[1] == 'n') && (S[2] == 'e') && (S[3] == '\0'))
   longjmp(buf,1);
 if((S[0] == 't') && (S[1] == 'w') && (S[2] == 'o') && (S[3] == '\0'))
   longjmp(buf,2);
 if((S[0] == 't') && (S[1] == 'h') && (S[2] == 'r') && (S[3] == 'e') && (S[4] == 'e') && (S[5] == '\0'))
   longjmp(buf,3);
 return 0;
}

main(){printf("%d\n",(digit("three")));}

 

---------- Το μήνυμα προστέθηκε στις 19:16 ----------

 

και το δεύτερο

>
int avg(v)
int *v;
{
 int i,j;
 for(i=0;i<(v[0]+v[1]+v[2]+v[3]+v[4]);i++);
 for(j=0;i > 0;j++,i-=5);
 return j;
}

 

---------- Το μήνυμα προστέθηκε στις 19:19 ----------

 

για το τελευταίο πρέπει να τα συνδιάσεις κάπως, αλλά δεν ξέρω πως :/

Δημοσ.

Ειμαι και γω πρωτο ετος σε καποια σχολη, και ηθελα μονο να πω πως δε φταινε αυτοι για τετοια περιστατικα. δεν θελω να διαφωνησω με κανεναν, ουτε να υποστηριξω τον g0rg0s. Με C εχω να ασχοληθω καιρο αλλα εφτιαξα ενα κωδικα παρομοιο σε java και δινεται παρακατω. Οπως ανεφερε καποιος ηδη, δεν χρειαστηκε πανω απο 10 λεπτα. g0rg0s προσπαθησε να τον προσαρμοσεις σε C.... και ισως κατι μαθεις.

>package readnumber;
import java.io.*;

public class ReadNumber {

   private String s;

   public ReadNumber(){
       int ot=digit();
       double d=avg();
       System.out.println("digit = "+ot);
       System.out.println("avg = "+dtw);
   }

   public int digit(){
       System.out.println("Type literal number: ");
       InputStreamReader input=new InputStreamReader(System.in);
       BufferedReader reader=new BufferedReader(input);
       try{
       s=reader.readLine();
       }
       catch(IOException e){}
  
       if (s.equals("one"))
           return 1;
       else if (s.equals("two"))
           return 2;
       else if (s.equals("three"))
           return 3;
       else return 0;
       }

   public double avg(){
       int ar[]=new int[5];
       int sum=0;
       for(int i=0;i<5;i++){
           System.out.println("Type five number ("+i+"): ");
       InputStreamReader input=new InputStreamReader(System.in);
       BufferedReader reader=new BufferedReader(input);
       try{
       s=reader.readLine();
       }
       catch(IOException e){}
       ar[i]=Integer.parseInt(s);
       }
       for(int i=0;i<5;i++)
           sum+=ar[i];
       return sum/5;
   }

   public static void main(String[] args) {
      new ReadNumber();

   }

}

 

Να ξερεις δεν το εκανα για να βοηθησω. Γιατι απλα εχεις λαθος νοοτροπια για να το ζητησεις.

Δημοσ.

Καλησπέρα εφτιαξα και γω έναν κώδικα αλλα έχει καποια λαθάκια που δεν τα καταλαβαίνω.Αν μπορεί κάποιος ας το τσεκάρει και να μου πεί που έχω κάνει λάθος...

Ευχαριστώ.

#include <stdio.h>

#include <string.h>

int Digit(char number[20]);

double avg (int xar[4]);

main()

{

char s[20];

int ar[4],i,j;

double mesos;

 

for (i=0;i<=4;i++){

printf(" dwse Enan arithmo \n ");

scanf("%s",&s);

j=Digit(s);

printf(" o arithmos sas einai %d \n",j);

 

ar=Digit(s);

}

 

mesos=avg(ar);

 

printf("%.2f",&mesos);

 

}

 

 

 

 

int Digit(char number[20]){

char *one="one";

char *two="two";

char *three="three";

 

if(strcmp(one,number)==0)

{

return 1;

}

else if(strcmp(two,number)==0)

{

return 2;

}

 

else if(strcmp(three,number)==0)

{

return 3;

}

else

{

return 0;

}

}

 

 

double avg (int xar[4]){

int m;

double i;

m=0;

 

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

{

m=m+xar;

}

 

i=m/5;

return i;

}

Δημοσ.

Κατ' αρχήν προσπαθείς να βάλεις 5 στοιχεία σε πίνακες 4 θέσεων. Οι πίνακες ar και xar θα πρέπει να έχουν 5 θέσεις σύμφωνα με την εκφώνηση.

 

Συνεχίζουμε:

 

for (i=0;i<=4;i++){

printf(" dwse Enan arithmo \n ");

scanf("%s",&s);

j=Digit(s);

printf(" o arithmos sas einai %d \n",j);

 

ar=Digit(s);

}

 

mesos=avg(ar);

 

printf("%.2f",&mesos);

 

}

 

Το όνομα ενός πίνακα είναι ήδη pointer. Συνεπώς δε χρειάζεται να βάλεις & μπροστά του (στη scanf). Σωστά γράφεται:

scanf("%s",s);

 

Επίσης, στην printf εννοείται ότι πρέπει να τυπώσεις την τιμή της μεταβλητής μέσος, και όχι τη διεύθυνσή της. Άρα το σωστό είναι

 

printf("%.2f",mesos);

 

double avg (int xar[4]){

int m;

double i;

m=0;

 

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

{

m=m+xar;

}

 

i=m/5;

return i;

}

 

Εδώ έχεις 3 προβληματάκια.

 

Κατ' αρχήν το i το χρησιμοποιείς για 2 διαφορετικές δουλειές. Και σαν μετρητή στο for (και σαν δείκτη θέσης στον πίνακα xar) και σαν τη μεταβλητή όπου θα βάλεις το αποτέλεσμα του μέσου όρου. Όμως δε μπορείς να χρησιμοποιήσεις έναν double αριθμό σαν δείκτη θέσης πίνακα.

 

Επίσης παρατήρησε ότι προσθέτεις 4 αριθμούς (xar[0], xar[1], xar[2] και xar[3]) αλλά για να βρεις το μέσο όρο διαιρείς δια 5. Είναι και πάλι το πρόβλημα που σου επεσήμανα πρώτο - πρώτο (έχεις μπλέξει λίγο τον αριθμό των στοιχείων που διαβάζεις, τις διαστάσεις των πινάκων κλπ).

 

Τέλος η διαίρεση m/5 θα σου δώσει ακέραιο (αφού διαιρούνται 2 ακέραιοι), ασχέτως αν μετά αυτός θα μπει σε μια double μεταβλητή και θα φαίνεται να έχει δεκαδικά ψηφία (που θα είναι 0). Για παράδειγμα, i = m/5 με το m 4 θα σου δώσει στο i 0.0 (και όχι 0.8). Ο σωστός τρόπος να γράψεις αυτή τη γραμμή είναι

i = m/5.0 ;

 

Εδώ, επειδή ο ένας από τους 2 αριθμούς είναι δεκαδικός στη διαίρεση, το αποτέλεσμα θα είναι επίσης δεκαδικός (και άρα αυτό που περιμένεις, δηλαδή δε θα χαθούν τα δεκαδικά ψηφία).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...