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

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

Δημοσ.

 

το μονο που βρηκα ειναι οτι για να απαληψεις το πρωτο ψηφιο του Μ κανεις  Μ%10^1 

και για να απαληψεις το τελευταιο ειναι Μ/10^1

 

για 6 ψηφία πρέπει |Μ|>=100000

Για να απαλείψεις τον τελευταιο  Μ %= 10

μετα για να βγάλεις τον πρώτο

int pow10 = 1;
while(M >= pow10)
   pow10 *= 10;	
if(M<pow10)
   pow10 /= 10;
	
M %= pow10;
Δημοσ.

 

 

Ιδέα μου είναι ή αυτός ο κώδικας είναι ολόιδιος με αυτόν που έδωσες στην αρχή ? Αυτό που κάνεις είναι απλά να βρίσκεις και να τυπώνεις τον αριθμό των ψηφίων. Σε ποιο σημείο ενσωμάτωσες την πρόταση του bird να ελέγχει αν είναι μικρότερο του 6 και να ξανατρέχει όλο το κομμάτι ?

 

το δοκιμασα αυτο που ειπε ο bird απο πανω αλλα δεν βγαζει σωστα τον αριθμο των ψηφιων(η εγω κατι κανω λαθος)

Δημοσ.

το δοκιμασα αυτο που ειπε ο bird απο πανω αλλα δεν βγαζει σωστα τον αριθμο των ψηφιων(η εγω κατι κανω λαθος)

ανέβασε τον κώδικα να δούμε που γίνεται το λάθος...

 

edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop...

  • Like 1
Δημοσ.

Τον εξαψήφιο θα στον βάζει ψηφίο ψηφίο ο χρήστης ή όλο μαζί?

 

Στην πρώτη περίπτωση πρέπει να βάζεις το ψηφίο σε ένα πίνακα πριν ξανακάνεις scanf.

Στην δεύτερη περίπτωση ένα από strlen θα σου πει το μέγεθος του αριθμού που έβαλε ο χρήστης.

Δημοσ.

Τον εξαψήφιο θα στον βάζει ψηφίο ψηφίο ο χρήστης ή όλο μαζί?

 

Στην πρώτη περίπτωση πρέπει να βάζεις το ψηφίο σε ένα πίνακα πριν ξανακάνεις scanf.

Στην δεύτερη περίπτωση ένα από strlen θα σου πει το μέγεθος του αριθμού που έβαλε ο χρήστης.

 

 

τον αριθμο ολο μαζι τον εισαγουμε.

αν ειναι μικροτερος απο 6 ψηφια ξανα εισαγουμε μεχρι να ειναι τουλαχιστον 6 ψηφια

ανέβασε τον κώδικα να δούμε που γίνεται το λάθος...

 

edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop...


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int M;
 int metra=0;

 printf("Eisagete enan akeraio arithmo M:\n");
 scanf("%d",&M);
 
 if (M<0) M*=-1;

 while(M) {

   M=M/10;
   metra++;
   
   while(metra<6)  {
                    printf("Eisagete enan allo akeraio arithmo me toulaxiston 6 psifia M:\n");
                    scanf("%d",&M);
                    if (M<0) M*=-1;
                    metra++;

}
               }

printf("To sinolo twn psifiwn einai:\n%d\n",metra);


system("PAUSE");    
return 0;
}
Δημοσ.

Οπότε αλλάζεις την scanf από %d (ακέραιο) σε %s (string)

 

και μετά με την strlen βρίσκεις το μήκος του.Σημείωση το παραπάνω θα δεχτεί έναν οποιοδήποτε χαρακτήρα πχ a123 θα πρέπει να ελέγξεις για αυτό.

 

Αν δεν σου αρέσει το παραπάνω

 

ανέβασε τον κώδικα να δούμε που γίνεται το λάθος...

 

edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop...

 

Ξαναδες μια το edit :P

Δημοσ.

 

τον αριθμο ολο μαζι τον εισαγουμε.

αν ειναι μικροτερος απο 6 ψηφια ξανα εισαγουμε μεχρι να ειναι τουλαχιστον 6 ψηφια

 

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M);  if (M<0) M*=-1; while(M) {   M=M/10;   metra++;      while(metra<6)  {                    printf("Eisagete enan allo akeraio arithmo me toulaxiston 6 psifia M:\n");                    scanf("%d",&M);                    if (M<0) M*=-1;                    metra++;}               }printf("To sinolo twn psifiwn einai:\n%d\n",metra);system("PAUSE");    return 0;}

 

Δεν είναι σωστή η λογική έτσι όπως το έχεις κάνει...

 

Φαντάσου κάπως έτσι:

...μηδενισμός μεταβλητής ψηφίωνwhile( ψηφία < 6) {   τύπωσε μήνυμα   διάβασε τον αριθμό   υπολόγισε τα ψηφία του αριθμού   αν ( αριθμός ψηφίων < 6 ) {      τύπωσε λάθος      μηδενισμός μεταβλητής ψηφίων    }}...
Δημοσ.

 

Δεν είναι σωστή η λογική έτσι όπως το έχεις κάνει...

 

Φαντάσου κάπως έτσι:

...
μηδενισμός μεταβλητής ψηφίων

while( ψηφία < 6) {
   τύπωσε μήνυμα
   διάβασε τον αριθμό

   υπολόγισε τα ψηφία του αριθμού

   αν ( αριθμός ψηφίων < 6 ) {
      τύπωσε λάθος
      μηδενισμός μεταβλητής ψηφίων
    }
}
...

κατι κανω λαθος  :X  :angry:  :angry:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int M;
 int metra=0;
  printf("Eisagete enan akeraio arithmo M:\n");
  scanf("%d",&M);
  if (M<0) M*=-1;
while(M<99999) {
  printf("Eisagete enan arithmo me toulaxiston 6 psifia  M:\n");
  scanf("%d",&M);
  while(M) {

   M=M/10;
   metra++;}

  
  
  


  

printf("To sinolo twn psifiwn einai:\n%d\n",metra);


system("PAUSE");    
return 0;
}

Δημοσ.

Σκέψου τι θα κάνει ο κώδικά σου, αν απο την αρχή ο χρήστης δώσει αριθμό με 6 ψηφία και πάνω...

Θα υπολογίσει τα ψηφία;

Δημοσ.

ξερει κανεις πως μπορω 

 

να διαβαζω τα στοιχεια ενος πινακα που δεν ξερω διαστασεις μεσα στην συναρτησηΑ

και να τα εμφανιζω στην main με αλλη συναρτηση Β???

Δημοσ.

Στη συνάρτηση Α από που θα διαβάζονται τα δεδομένα (αρχείο, πληκτρολογιο);

Πώς θα καταλαβαίνεις πόσα στοιχεία να διάβασεις; Θα δίνει ο χρήστης στην αρχή της συνάρτησης ότι θέλει να δώσει π.χ. 20 τιμές και μετά θα τις διαβάζεις ή θα διαβάζεις μέχρι να δώσει ο χρήστης μια συγκεκριμένη τιμή ή μέχρι να τελειώσει το αρχείο αν διαβάζεις απο αρχείο;

Τι τιμές θα έχει ο πίνακας; int, char, string;

Έχεις μάθει δυναμική δέσμευση μνήμης (malloc/calloc);

Έχεις μάθει δείκτες;

 

Δώσε κάτι παραπάνω να σου πούμε, όλοι ξέρουν εδώ μεσα πως γίνεται αυτό που ζητάς, αρκεί να το διευκρυνίσεις...

Δημοσ.

Στη συνάρτηση Α από που θα διαβάζονται τα δεδομένα (αρχείο, πληκτρολογιο);

Πώς θα καταλαβαίνεις πόσα στοιχεία να διάβασεις; Θα δίνει ο χρήστης στην αρχή της συνάρτησης ότι θέλει να δώσει π.χ. 20 τιμές και μετά θα τις διαβάζεις ή θα διαβάζεις μέχρι να δώσει ο χρήστης μια συγκεκριμένη τιμή ή μέχρι να τελειώσει το αρχείο αν διαβάζεις απο αρχείο;

Τι τιμές θα έχει ο πίνακας; int, char, string;

Έχεις μάθει δυναμική δέσμευση μνήμης (malloc/calloc);

Έχεις μάθει δείκτες;

 

Δώσε κάτι παραπάνω να σου πούμε, όλοι ξέρουν εδώ μεσα πως γίνεται αυτό που ζητάς, αρκεί να το διευκρυνίσεις...

 

 

Να γίνει ανάπτυξη προγράμματος σε  γλώσσα  C με το οποίο θα γίνεται εισαγωγή των στοιχείων σε ένα πίνακα ακεραίων και θα βρίσκει το πλήθος των αρνητικών και το πλήθος των θετικών στοιχείων του κάθε πίνακα. Επίσης θα υπολογίζεται ένας δεύτερος πίνακας που θα αποτελείται από τα τετράγωνα των στοιχείων του αρχικού πίνακα. Το πρόγραμμα θα περιλαμβάνει τις συναρτήσεις:

1)     pinisodos Εισάγονται τα στοιχεία ενός πίνακα

2)     pinplithos Βρίσκει και επιστρέφει το πλήθος των θετικών και το πλήθος των αρνητικών στοιχείων ενός πίνακα.

3)     pintetra βρίσκει και επιστρέφει πίνακα με τα τετράγωνα των στοιχείων ενός πίνακα

4)     pinemfa Θα εμφανίζονται στην οθόνη τα στοιχεία του πίνακα

Στο main -

      - Θα γίνεται κλήση της συνάρτησης sinisodos για να εισάγονται τα στοιχεία πίνακα.

-Θα γίνεται κλήση της συνάρτησης sinplithos για να υπολογίζεται και επιστρέφεται το πλήθος των θετικών και το πλήθος των αρνητικών στοιχείων του πίνακα. Το πλήθος θετικών και αρνητικών θα εμφανίζεται με εντολή printf στο main.

-Θα γίνεται κλήση της συνάρτησης spintetra για να υπολογίζεται και επιστρέφεται πίνακα με τα τετράγωνα των στοιχείων ενός πίνακα

Θα γίνεται κλήση της συνάρτησης emfsin δύο φορές για να εμφανίζονται στην οθόνη τα στοιχεία του αρχικού πίνακα και τα στοιχεία του πίνακα που αποτελείται από τα τετράγωνα των στοιχείων του αρχικού πίνακα

 

 

 

δεικτες εχω κανει μονο αλλα λιγα πραγματα

Δημοσ.

κατι κανω λαθος  :X  :angry:  :angry:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int M;
 int metra=0;
  printf("Eisagete enan akeraio arithmo M:\n");
  scanf("%d",&M);
  if (M<0) M*=-1;
while(M<99999) {
  printf("Eisagete enan arithmo me toulaxiston 6 psifia  M:\n");
  scanf("%d",&M);
  while(M) {

   M=M/10;
   metra++;}
printf("To sinolo twn psifiwn einai:\n%d\n",metra);

system("PAUSE");    
return 0;
}

 

Τι IDE χρησιμοποιείς ? Όλα τα IDE έχουν κάποιο "beautifier" που φτιάχνει σωστά την σύνταξη γιατί έτσι μας βγαίνουν τα μάτια.

 

Όσον αφορά τον κώδικα, δεν είναι ακριβώς αυτό που περιέγραψε ο bird με ψευδοκώδικα. Προσπάθησε να σκέφτεσαι τα βήματα και μετά απλά μετάφρασε τα σε C. Εδώ δεν χρειάζεται καν να τα σκεφτείς γιατί στα έδωσε ο bird. Αφού ελέγχεις αν το Μ είναι μικρότερο του 99999 γιατί μετά έχεις πάλι while με υπολογισμό των ψηφίων ? Εφόσον η άσκηση δεν σου ζητάει να βρεις τον αριθμό ψηφίων, μόνο η συνθήκη του μικρότερου (με τη παρούσα μορφή της συνθήκης το σωστό είναι μικρότερο-ίσο) αρκεί.

 

Πάμε πάλι από την αρχή. Μία από τις πολλές εκδοχές είναι η εξής:

Αριθμός = 0
Όσο Αριθμός < 100000
   Εμφάνισε μήνυμα "Δώσε μπλα μπλα:"
   Διάβασε Αριθμό
   Αν Αριθμός < 0 κάνε τον θετικό
   Αν Αριθμός < 100000 Πάμε πάλι από την αρχή
   // Σε αυτό το σημείο σημαίνει ότι ο αριθμός είναι θετικός 6+ψήφιος
   // άρα γράφουμε τον κώδικα που αφαιρεί το πρώτο-τελευταίο ψηφίο
   Εμφάνισε το νέο αριθμό
Τέλος βρόχου
Γράψε αυτό σε C
Δημοσ.

Τι IDE χρησιμοποιείς ? Όλα τα IDE έχουν κάποιο "beautifier" που φτιάχνει σωστά την σύνταξη γιατί έτσι μας βγαίνουν τα μάτια.

 

Όσον αφορά τον κώδικα, δεν είναι ακριβώς αυτό που περιέγραψε ο bird με ψευδοκώδικα. Προσπάθησε να σκέφτεσαι τα βήματα και μετά απλά μετάφρασε τα σε C. Εδώ δεν χρειάζεται καν να τα σκεφτείς γιατί στα έδωσε ο bird. Αφού ελέγχεις αν το Μ είναι μικρότερο του 99999 γιατί μετά έχεις πάλι while με υπολογισμό των ψηφίων ? Εφόσον η άσκηση δεν σου ζητάει να βρεις τον αριθμό ψηφίων, μόνο η συνθήκη του μικρότερου (με τη παρούσα μορφή της συνθήκης το σωστό είναι μικρότερο-ίσο) αρκεί.

 

Πάμε πάλι από την αρχή. Μία από τις πολλές εκδοχές είναι η εξής:

Αριθμός = 0
Όσο Αριθμός < 100000
   Εμφάνισε μήνυμα "Δώσε μπλα μπλα:"
   Διάβασε Αριθμό
   Αν Αριθμός < 0 κάνε τον θετικό
   Αν Αριθμός < 100000 Πάμε πάλι από την αρχή
   // Σε αυτό το σημείο σημαίνει ότι ο αριθμός είναι θετικός 6+ψήφιος
   // άρα γράφουμε τον κώδικα που αφαιρεί το πρώτο-τελευταίο ψηφίο
   Εμφάνισε το νέο αριθμό
Τέλος βρόχου
Γράψε αυτό σε C

 

 

φιλε σε dev ++  γραφω ενταξει την ελησα αυτη την ασκηση.

αν μπορεις να βοηθησεις στην αλλη

Δημοσ.

ξερει κανεις πως μπορω 

 

να διαβαζω τα στοιχεια ενος πινακα που δεν ξερω διαστασεις μεσα στην συναρτησηΑ

και να τα εμφανιζω στην main με αλλη συναρτηση Β???

Δεν μπορεις να βρεις το μήκος του πίνακα μεσα απο την συναρτησηΑ.

Γιαυτο συνήθως οι συναρτήσεις που δέχονται πίνακες έχουν και μια παραμετρο για το μήκος.

Μια λύση στου πίνακες char[] είναι ο τελευταίος χαρακτηρας του να ειναι το '\0' σαν σημάδι τέλους.

Σε int[] μπορεις να βάλεις το -1στο τέλος εαν δεν πρόκειται να έχει κάποιο κανονικό του στοιχείο τιμή -1 ποτέ.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...