προσθεση αφαιρεση c

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
JOHNYS20
Δημοσιεύσεις: 28
Εγγραφή: 29 Νοέμ 2010 18:08

προσθεση αφαιρεση c

Δημοσίευση από JOHNYS20 » 03 Μαρ 2011 17:59

Κώδικας: Επιλογή όλων

Να κατασκευαστεί πρόγραμμα με το οποίο θα υλοποιούνται οι πράξεις της πρόσθεσης και της αφαίρεσης για αριθμού των οποίων το πλήθος των ψηφίων του καθενός από αυτούς είναι μεγαλύτερο από 100. Οι αριθμοί θα δίνονται από τον χρήστη. Το πρόγραμμα θα γνωρίζει το μέγεθος κάθε αριθμού πριν διαβάσει τον αριθμό και θα τον αποθηκεύει-καταχωρεί σ' έναν πίνακα υλοποιημένο με τη χρήση δείκτη.

πως θα ελεγχει οτι το πληθοσ των ψηφιων θα ειναι μεγαλυτερο απο 100?
και πωσ θα γνωριζει το μεγεθοσ του καθε αριθμου?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από dva_dev » 04 Μαρ 2011 04:23

Για να γνωρίζει το μέγεθος του αριθμού πριν διαβάσει τον αριθμό μου έρχονται στο μυαλό 2 τρόποι.
α) Να το δίνει ο χρήστης.
β) Ο αριθμός να είναι αποθηκευμένος σε κάποιο text αρχείο (χωρίς extra πράγματα), οπότε κοιτώντας το μέγεθος του αρχείου θα ξέρει πόσο μεγάλος μπορεί να είναι.

Κατόπιν διαβάζοντας σιγά σιγά τον αριθμό μπορείς να τσεκάρεις αν όντως έχει περισσότερα από 100 ψηφία.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 05:19

argv[1] argv[2] αυτα θες

int main(int argc,char** argv)

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 12:42

pimpogio έγραψε:argv[1] argv[2] αυτα θες

int main(int argc,char** argv)
Αν δε γνωρίζεις κάτι, είναι προτιμότερο να μην απαντάς γιατί μπερδεύεις περισσότερο αυτόν που ρωτάει.

JOHNYS20
Δημοσιεύσεις: 28
Εγγραφή: 29 Νοέμ 2010 18:08

προσθεση αφαιρεση c

Δημοσίευση από JOHNYS20 » 04 Μαρ 2011 17:42

dva_dev έγραψε:Για να γνωρίζει το μέγεθος του αριθμού πριν διαβάσει τον αριθμό μου έρχονται στο μυαλό 2 τρόποι.
α) Να το δίνει ο χρήστης.
β) Ο αριθμός να είναι αποθηκευμένος σε κάποιο text αρχείο (χωρίς extra πράγματα), οπότε κοιτώντας το μέγεθος του αρχείου θα ξέρει πόσο μεγάλος μπορεί να είναι.

Κατόπιν διαβάζοντας σιγά σιγά τον αριθμό μπορείς να τσεκάρεις αν όντως έχει περισσότερα από 100 ψηφία.


πωσ θα διαβαζω σιγα σιγα τον αριθμο ωστε να τσεκαρω ποσα ψηφια ειναι?

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 18:27

gvre έγραψε:
pimpogio έγραψε:argv[1] argv[2] αυτα θες

int main(int argc,char** argv)
Αν δε γνωρίζεις κάτι, είναι προτιμότερο να μην απαντάς γιατί μπερδεύεις περισσότερο αυτόν που ρωτάει.
Giati tha sou paro tin adeia ?

ela..

Κώδικας: Επιλογή όλων

cat tsak.c
#include <stdio.h>
#include <string.h>

int main&#40;int argc,char** argv&#41;&#123;
printf&#40;"megethos 1ou&#58;%d - megethos 2ou&#58;%d\n",strlen&#40;argv&#91;1&#93;&#41;,strlen&#40;argv&#91;2&#93;&#41; &#41;;
return 0;
&#125;

make tsak
cc     tsak.c   -o tsak
./tsak 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890122
megethos 1ou&#58;101 - megethos 2ou&#58;103
./tsak 123456789 12345
megethos 1ou&#58;9 - megethos 2ou&#58;5
xrisimopoieise tis parametrous tis main eukola kai apla

edit--
εχω και τον κωδικα που κανει αυτο που θες
προσπαθησε (με ψευδοκωδικα στην αρχη)και αν δεν τα καταφερεις θα στον στειλω.
Το προγραμμα σου προσπαθησε να το κανεις να παιζει δυναμικα χωρις να χρειαζετε ο χρηστης να δηλωνει το μεγεθος του αριθμου (ετσι ειναι τα πραγματικα προγραμματα)
Φαντασου να ειχες ενα κομπιουτερακι και να ηθελες να κανεις μια πραξη και να σου ζητουσε ποσα ψηφια ειναι ο αριθμος που θα του βαλεις ...
Θα το εσπαγες η οχι ?

Κώδικας: Επιλογή όλων

./tsak 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Result&#58;111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110

./tsak 90123097432138478923987420470623746872148972437431431795341956234234 + 1878644322425689712367453423443256234562345324
Result&#58;90123097432138478923989299114946172561861339890854875051576518579558

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 20:53

pimpogio έγραψε:
gvre έγραψε:
pimpogio έγραψε:argv[1] argv[2] αυτα θες

int main(int argc,char** argv)
Αν δε γνωρίζεις κάτι, είναι προτιμότερο να μην απαντάς γιατί μπερδεύεις περισσότερο αυτόν που ρωτάει.
Giati tha sou paro tin adeia ?
Δε νομίζω ότι χρειάζεται κάποιος άδεια εδώ μέσα για να απαντήσει. Αν θέλεις να βοηθήσεις, καλό είναι η απάντηση που δίνεις να έχει σχέση με την ερώτηση και όχι να απαντάς απλά για να γράψεις κάτι. Ξαναδιάβασε την αρχική ερώτηση και μετά την απάντηση που έδωσες. Ίσως καταλάβεις τι εννοώ.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 20:56

γιατι δεν εχει σχεση με την ερωτηση ?
οτι λεει η ερωτηση του απαντησα η main εχει ενα ορισμα char** και του ειπα να το χρησιμοποιησει ωστε να κανει αυτο που θελει ...

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 21:01

Ο χρήστης ρώτησε:
πως θα ελεγχει οτι το πληθοσ των ψηφιων θα ειναι μεγαλυτερο απο 100?
και πωσ θα γνωριζει το μεγεθοσ του καθε αριθμου?
Εσύ απάντησες:
argv[1] argv[2] αυτα θες

int main(int argc,char** argv)
Σε ποιά από τις 2 ερωτήσεις πιστεύεις ότι απάντησες; Εγώ νομίζω ότι η απάντησή σου ταιριάζει σε ερώτηση του τύπου "Πώς μπορώ να διαβάσω τα ορίσματα που έδωσε ο χρήστης στη γραμμή εντολών;".

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 21:07

αυτο που του απαντησα ειτανε αυτο που ηθελε..
οτι υπαρχει ηδη ετοιμο στο ορισμα char** στην main για να κανει αυτο που θελει...

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 21:16

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

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 21:21

ειχα απαντησει και σε αυτο αλλα δεν το προσεξες...
και θα τον αποθηκεύει-καταχωρεί σ' έναν πίνακα υλοποιημένο με τη χρήση δείκτη.

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 21:25

Ένας από τους δύο δε βλέπει καλά :) Εγώ πάντως τέτοια απάντηση δε βλέπω. Τέλος πάντων, δεν έχει και πολύ σημασία. Απάντησες σε επόμενο post. Δε χρειάζεται να τραβάμε το thread χωρίς λόγο.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

προσθεση αφαιρεση c

Δημοσίευση από pimpogio » 04 Μαρ 2011 21:30

τα argv[1] argv[2] δεν ειναι πίνακες υλοποιημένοι με τη χρήση δείκτη ?

παρε ενα παραδειγμα για ξεκινημα να κανεις το προγραμμα...

Κώδικας: Επιλογή όλων

$cat tsak.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* bigIntegersAdd&#40;char* integer1, char* integer2&#41;&#123;
  char *p, *q, *temp, *t, *buffer;
  int num, carry = 0, len, i;

  p = integer1 + strlen&#40;integer1&#41; - 1;
  q = integer2 + strlen&#40;integer2&#41; - 1;
  len=&#40;strlen&#40;integer1&#41;+strlen&#40;integer2&#41;&#41;*sizeof&#40;char&#41;;
  temp=&#40;char *&#41;malloc&#40;len&#41;;
  buffer=&#40;char *&#41;malloc&#40;len&#41;;
  t = temp;

  for&#40;;p >= integer1 || q >= integer2; p--, q--&#41;&#123;
    num = carry;
    num += p >= integer1 ? *p - '0' &#58; 0;
    num += q >= integer2 ? *q - '0' &#58; 0;
    if&#40;&#40;carry = num / 10&#41;&#41;&#123;
      num -= 10;
    &#125;
    *t++ = num + '0';
  &#125;

  if&#40;carry && t - temp < len&#41;&#123;
    *t = '1';
  &#125;else&#123;
    t--;
  &#125;
  for&#40;i=0; t>= temp; i++&#41;&#123;
    buffer&#91;i&#93; = *t--;
  &#125;
  buffer&#91;i&#93; = '\0';
return buffer;
&#125;

int isInteger&#40;char* integer1&#41;&#123;
 int i;
 for&#40;i=0;i<strlen&#40;integer1&#41;;i++&#41;&#123;
  if&#40;!isdigit&#40;integer1&#91;i&#93;&#41;&#41;&#123;
   return 0;
  &#125;
 &#125;
return 1;
&#125;

int main&#40;int argc,char** argv&#41;&#123;
if&#40;argc==4 && !strcmp&#40;argv&#91;2&#93;,"+"&#41; && isInteger&#40;argv&#91;1&#93;&#41; && isInteger&#40;argv&#91;3&#93;&#41; &#41;&#123;
 printf&#40;"Result&#58;%s\n",bigIntegersAdd&#40;argv&#91;1&#93;,argv&#91;3&#93;&#41;&#41;;
 return 0;
&#125;else if&#40; argc==4 && !strcmp&#40;argv&#91;2&#93;,"-"&#41; && isInteger&#40;argv&#91;1&#93;&#41; && isInteger&#40;argv&#91;3&#93;&#41; &#41;&#123;
 printf&#40;"Ftiakse to\n"&#41;;
 return 1;
&#125;else&#123;
 printf&#40;"Usage&#58;%s <integer1> <+|-> <integer2>\n",argv&#91;0&#93;&#41;;
 return 1;
&#125;
&#125;

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προσθεση αφαιρεση c

Δημοσίευση από gvre » 04 Μαρ 2011 21:42

Εξαρτάται από το τι *ακριβώς* ζητάει η άσκηση. Η εκφώνηση δε βοηθάει και πολύ. Επίσης δε διευκρινίζει αν θέλει το άθροισμα 2 ή περισσότερων αριθμών. Ας στείλει περισσότερες πληροφορίες ο op και βλέπουμε.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες