Article View: es.comp.os.linux.programacion
Article #11127Re: problemas con C
From: Xavier Montero
Date: Sun, 30 Dec 2001 02:07
Date: Sun, 30 Dec 2001 02:07
139 lines
5824 bytes
5824 bytes
> Estoooo, el modulo es una operacion matematica con una definicion
> ligeramente distinta(*),
Ejem... el m�dulo (operaci�n) se define _s�lo_ para enteros y
se define _exactamente_ como el representante de una clase que
se define (la clase se define) como "los n�meros naturales que
tienen el mismo resto al dividir por el m�dulo (n�mero) del
anillo para el que operamos". Se elige como representante el
menor natural que cumple eso, y por definici�n de resto (que
siempre es positivo o cero y que nunca puede exceder o igualar
al cociente) coinciden... pero es que coinciden por definicion,
no porque sean cosas distintas.
> que coincide con el resto de la division
> _s�lo_ en el caso de los numeros naturales (enteros positivos)
C�mo se calcula el resto de "-23 / 5"? Debo decir "me guardo
el signo, divido 23 entre 5, caben a 4 y de resto 3 y luego
aplico signos?, es decir de resto -3"... o debo decir "caben
a -5 para obtener el m�ximo m�ltiplo de 5 menor o
igual que -23 (es decir, -25) y de resto 2".
Est� claro que en los naturales o cero, coincide. Est� claro
que para los racionales, irracionales e imaginarios no aplica,
porque no se define el m�dulo, y para los enteros negativos
coincidir� o no seg�n se defina:
--- 8< ------------------------------------------------
xavi@inspire:~/j$ g++ -lm modulus.c
xavi@inspire:~/j$ a.out
2 2 2
-2 -2 1
xavi@inspire:~/j$ cat modulus.c
#include <stdio.h>
#include <math.h>
void main(void)
{
int a, b;
int c, d;
float quoscient;
a = 5;
b = 3;
c = -5;
d = 3;
quoscient = (float)a / (float)b;
printf("%d\t", a % b );
printf("%d\t", a - (b * (int)quoscient));
printf("%d\n", a - (b * (int)floor(quoscient)));
quoscient = (float)c / (float)d;
printf("%d\t", c % d );
printf("%d\t", c - (d * (int)quoscient));
printf("%d\n", c - (d * (int)floor(quoscient)));
}
xavi@inspire:~/j$
--- 8< ------------------------------------------------
Seg�n el g++, -5 m�dulo 3 da -2. Seg�n mi profesor de
�lgebra, -5 mod 3 da... veamos: m�dulo 3 indica
s�lo operar con los representantes de 0 a 2 (0, 1 y 2).
partimos de 0:
0 = 0
hacia arriba:
0 = 0
1 = 1
2 = 2
3 = 0 (m�dulo entero)
4 = 1
5 = 2
6 = 3 = 0
7 = 4 = 1
8 = 5 = 2
9 = 6 = 3 = 0
...
hacia abajo:
0 = 0
-1 = 2
-2 = 1
-3 = 0
-4 = -1 = 2
-5 = -2 = 1
-6 = -3 = 0
-7 = -4 = -1 = 2
bien... pues seg�n mi profe de �lgebra (y yo comparto su forma
de verlo), -5 mod 3 = 1
Seg�n una definici�n de resto:
printf("%d\t", c - (d * (int)quoscient));
-5 mod 3 da -2.
Seg�n la otra:
printf("%d\n", c - (d * (int)floor(quoscient)));
-5 mod 3 da 1 (lo mismo que mi profe y yo decimos).
As� que si coincide o no depende de c�mo se definan las cosas...
Por ejemplo, est� claro que el C no tiene definido el m�dulo
como mi profe y yo tenemos (a mi no me puede salir un m�dulo
negativo jam�s y al C parece que s�), y el tema del resto...
depende del cristal con que se mire... depender� de c�mo
defina cociente... Si es el "menor valor que...", para m�,
-2 es menor que -1 y por tanto, para -5 mod 3, caben a -2,
-2 x 3 = -6, que hasta menos cinco da un resto de 1.
(y me dar� un resto que coincide en c�mo defino m�dulo).
Si se trata de definir el cociente como el "valor con menor
valor absoluto que..." entonces -1 tiene menor valor absoluto
que -2 y -5 entre 3 caben a -1 y de resto -2.
Para mi gusto particular, que cada uno se defina lo que quiera
como quiera, pero personalmente no le encuentro sentido
a definir un algoritmo para cocientes positivos y otro para
negativos, de modo que prefiero la primera definici�n que
define un �nico algoritmo de divisi�n entera, y en ambos
casos me da resultados (restos y m�dulos) positivos que siempre
coinciden.
En cualquier caso, lo que dices del ADA puede que vaya por
aqu�, en definir una u otra operaciones y ponerle un nombre
distinto, es decir una etiqueta ("resto" o "m�dulo") a una
y otra posibles definiciones. Supongo que estamos de acuerdo
en que se trata �nicamente de un problema de tener suficientes
nombres para suficientes operaciones y parece que tenemos
dos nombres (resto y m�dulo) para muchas m�s definiciones
posibles, �no?
Saludos!
Xavi.
Technical Details
Message-ID:
<3C2E76D0.1959589E@dsitelecom.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!fr.usenet-edu.net!usenet-edu.net!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mailReferences:
<ab4993a4.0112141425.1c82dbad@posting.google.com> <3c222dcb@filemon.telecable.es> <3C228306.2972FE0A@dsitelecom.com> <251cb474.0112241016.15962dd2@posting.google.com> <3C2DE460.3E8E44A4@dsitelecom.com> <87adw1znoh.fsf@eb2ebu.ampr.org>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,108ef0ba0c562fe9 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-12-29 19:01:04 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!fr.usenet-edu.net!usenet-edu.net!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail From: Xavier Montero <xmontero@dsitelecom.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: problemas con C Date: Sun, 30 Dec 2001 03:07:12 +0100 Organization: Digital Sound Items Lines: 139 Message-ID: <3C2E76D0.1959589E@dsitelecom.com> References: <ab4993a4.0112141425.1c82dbad@posting.google.com> <3c222dcb@filemon.telecable.es> <3C228306.2972FE0A@dsitelecom.com> <251cb474.0112241016.15962dd2@posting.google.com> <3C2DE460.3E8E44A4@dsitelecom.com> <87adw1znoh.fsf@eb2ebu.ampr.org> NNTP-Posting-Host: 212.25.147.135 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: news.wanadoo.es 1009680868 12328 212.25.147.135 (30 Dec 2001 02:54:28 GMT) X-Complaints-To: usenet@wanadoo.es NNTP-Posting-Date: Sun, 30 Dec 2001 02:54:28 +0000 (UTC) X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U) X-Accept-Language: en