Πρόβλημα σε ασκηση στην C

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

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

Απάντηση
tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Πρόβλημα σε ασκηση στην C

Δημοσίευση από tasosatha » 29 Δεκ 2010 23:23

Εχω μια ασκηση στην οποια πρεπει να κατασκευασω μια συναρτηση η οποια να υπολογιζει το πηλικο 2 αριθμων(Μ/Ν) μετρώντας ουσιαστικα ποσες φορες αφαιρηται ο ενας απο τον αλλο. Αν
το Ν ειναι 0 τοτε θα επιστρεφει 0 και αν το Μ ειναι αρνητικο τοτε να επιστρεφει το πηλικο με αρνητικο προσημο.Εγω εγραψα το παρακατω προγραμμα αλλα δεν μπορω να καταλαβω που εκανα λαθος.

#include <stdio.h>

int mydiv(int M, int N)
{
int plithos;
while (M>0)
{
M=M-N;
plithos=plithos+1;
}
return (plithos);
}


main()
{
int M,N,plithos;
printf("Dwse ton arithmo M\n");
scanf("%d/n",&M);
printf("Dwse ton arithmo N\n");
scanf("%d\n",&N);
if (N==0)
{
printf("To piliko einai 0");
}
plithos=mydiv(M,N);
if (M<0)
{
plithos=(-1)*plithos;
}
printf("To piliko einai:%d\n",plithos);
}

alex599
Δημοσιεύσεις: 66
Εγγραφή: 17 Δεκ 2008 01:11
Τοποθεσία: Πάτρα

Πρόβλημα σε ασκηση στην C

Δημοσίευση από alex599 » 29 Δεκ 2010 23:57

στην συνάρτηση σου πρώτα μηδένισε τον μετρητή σου plithos=0, αλλιώς μέσα έχει σκουπίδια.
while(!dead()) ++knowledge;

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Πρόβλημα σε ασκηση στην C

Δημοσίευση από tasosatha » 30 Δεκ 2010 00:16

Το δοκιμασα.Έβαλα στην συναρτηση πριν το while plithos=0. Αλλα παλι οταν παω να το τρεξω με το cygwin μου ζηταει τιμη για το Μ και το Ν και μετα δεν συνεχιζει το προγραμμα.Δεν μπορω να καταλαβω που ειναι το λαθος...

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα σε ασκηση στην C

Δημοσίευση από virxen75 » 30 Δεκ 2010 00:54

το λάθος είναι στις scanf.Υπάρχουν και κάποια άλλα.Δες τον διορθωμένο κώδικα.

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

#include <stdio.h>

int mydiv&#40;int M, int N&#41;&#123;
    int plithos=0;//1
    while &#40;M>0&#41;&#123;
        M=M-N;
        if &#40;M>0&#41;
            plithos++;//2
    &#125;
return plithos;
&#125;


int main&#40;&#41;&#123;
    int M,N,plithos;
    printf&#40;"Dwse ton arithmo M\n"&#41;;
    scanf&#40;"%d",&M&#41;;//3
    getchar&#40;&#41;;//4
    printf&#40;"Dwse ton arithmo N\n"&#41;;
    scanf&#40;"%d",&N&#41;;//5
    getchar&#40;&#41;;//6
    if &#40;N==0&#41;&#123;
        printf&#40;"To piliko einai 0"&#41;;
        getchar&#40;&#41;;//7
        return 0;//8
    &#125;
    plithos=mydiv&#40;M,N&#41;;
    if &#40;M<0&#41;&#123;
        plithos=-plithos;
    &#125;
    printf&#40;"To piliko einai&#58;%d\n",plithos&#41;;
    getchar&#40;&#41;;//9
    return 0;//10
&#125;

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

Πρόβλημα σε ασκηση στην C

Δημοσίευση από dva_dev » 30 Δεκ 2010 01:05

Φίλε tasosatha πό αυτά που γράφεις καταλαβαίνω ότι όλοι οι έλεγχοι πρέπει να γίνονται μέσα στη συνάρτηση mydiv και όχι έξω από αυτήν.
Εγώ θα το έγραφα κάπως έτσι:

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

#include <stdio.h>

int mydiv&#40;int M, int N&#41;
&#123;
	int plithos;
	int sign;

	if &#40;N==0&#41;
		return 0;

	if &#40;M<0&#41;
	&#123;
		sign = -1;
		M = -M;
	&#125;
	else
		sign = 1;

	plithos = 0;
	while &#40;M>=N&#41;
	&#123;
		M=M-N;
		plithos=plithos+1;
	&#125;

	return sign*plithos;
&#125;

int main&#40;&#41;
&#123;
	int M,N,plithos;
	printf&#40;"Dwse ton arithmo M\n"&#41;;
	scanf&#40;"%d",&M&#41;;
	printf&#40;"Dwse ton arithmo N\n"&#41;;
	scanf&#40;"%d",&N&#41;;

	plithos = mydiv&#40;M,N&#41;;

	printf&#40;"To piliko einai&#58;%d\n",plithos&#41;;
&#125;

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Πρόβλημα σε ασκηση στην C

Δημοσίευση από tasosatha » 30 Δεκ 2010 14:28

Ο έλεγχος για Ν=0 και για αρνητικο πηλίκο πρεπει να γίνεται στη main.

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Πρόβλημα σε ασκηση στην C

Δημοσίευση από tasosatha » 30 Δεκ 2010 15:04

OK σας ευχαριστω ολους!!Τελικα το βρηκα την εγραψα ετσι και δουλευει κανονικα...

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

#include <stdio.h>

int mydiv&#40;int M, int N&#41;
&#123;
	int plithos;
	plithos=0;
	while &#40;M>=N&#41;
	&#123;
		M=M-N;
		plithos=plithos+1;
	&#125;
	return plithos;
&#125;


int main&#40;&#41;
&#123;
	int M,N,plithos;
	printf&#40;"Dwse ton arithmo M\n"&#41;;
	scanf&#40;"%d",&M&#41;;
	printf&#40;"Dwse ton arithmo N\n"&#41;;
	scanf&#40;"%d",&N&#41;;
	if &#40;N==0&#41;
	&#123;
		plithos=0;
	&#125;
	else if &#40;M<0&#41;
	&#123;
		M=-M;
		plithos=mydiv&#40;M,N&#41;;
		plithos=-plithos;
	&#125;
	else 
	&#123;
		plithos=mydiv&#40;M,N&#41;;
	&#125;
		printf&#40;"To phliko einai&#58;%d\n",plithos&#41;;
&#125;

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

Πρόβλημα σε ασκηση στην C

Δημοσίευση από dva_dev » 31 Δεκ 2010 00:28

tasosatha έγραψε:Εχω μια ασκηση στην οποια πρεπει να κατασκευασω μια συναρτηση η οποια να υπολογιζει το πηλικο 2 αριθμων(Μ/Ν) μετρώντας ουσιαστικα ποσες φορες αφαιρηται ο ενας απο τον αλλο. Αν το Ν ειναι 0 τοτε θα επιστρεφει [η συνάρτηση] 0 και αν το Μ ειναι αρνητικο τοτε να επιστρεφει [η συνάρτηση] το πηλικο με αρνητικο προσημο.
Αρα πρέπει να φτιάξεις μια συνάρτηση που να κάνει όλα αυτά τα πράγματα.

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Πρόβλημα σε ασκηση στην C

Δημοσίευση από tasosatha » 03 Ιαν 2011 15:46

Συγνώμη, μαλλον το διατύπωσα λαθος.Ο ελεγχος για Ν=0 και για Μ<0 πρεπει να γινεται στην main(). Τώρα θα ηθελα να ρωτησω αν θεωρήσω τα Μ,Ν θετικούς αριθμους πως θα μπορουσα να κανω την συναρτηση να λειτουργει με αναδρομή???(Απο οτι εχω διαβασει μόνος μου για αναδρομη μεσα στην συναρτηση καλειται παλι η ιδια συναρτηση.Δεν πρεπει ομως να εχω ολοκληρωσει καπου την συναρτηση για να την καλέσω???)

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα σε ασκηση στην C

Δημοσίευση από virxen75 » 03 Ιαν 2011 16:09

με αναδρομή θα μπορούσε να είναι έτσι

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

int mydiv&#40;int M, int N,int plithos&#41;&#123;
   if&#40;M>=N&#41;&#123;
      M=M-N;
      plithos++;
      return mydiv&#40;M,N,plithos&#41;;
   &#125;
   return plithos;
&#125;

Απάντηση

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

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

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