Discussion:
Otra dudilla ;-)
(demasiado antiguo para responder)
Kenzo-Xs
2003-09-12 16:06:13 UTC
Permalink
Que tal grupo , ya me hechabais de menos verdad ( pero mira que soy pesao)
Bueno a ver , tengo otro programa que entinedo lo que hace pero tengo una
duda

AVISO:No le busqueis imperfecciones ni me digais que de otra manera se haria
mas facil , o que esta mal redactado ... es cosa de mi profesor , que los
pone asi

el programa es:
------------------------------
#include <stdio.h>

int n,p;

void main(){

scanf("%i",&n);
for (p=1;p<1000;p=p*n) if(p>500) printf("%i ",p);
printf("%i ",p);

getch();
}
--------------------------------
pide que escribe para un valor de n = 3 , 5 , 6

sale:
para 3=729 2187
para 5=625 3125
para 6=1296

para los dos primeros valores (3,5) escribe primero 729 o 625 porque se
cumple que p>500 y despues cumple lo de p<1000 y escribe 2187 o 3125

pero para valor de 6 no se que printf escribe el resultado

Es el primero o el segundo????
Por que ????

Saludos y perdonar las molestias
Winfree
2003-09-12 17:44:27 UTC
Permalink
Post by Kenzo-Xs
para 3=729 2187
para 5=625 3125
para 6=1296
para los dos primeros valores (3,5) escribe primero 729 o 625 porque se
cumple que p>500 y despues cumple lo de p<1000 y escribe 2187 o 3125
pero para valor de 6 no se que printf escribe el resultado
Vamos a ver, creo que ya antes te comentaron que el for, si no hay un
bloque de sentencias entre { } sólo ejecuta una sentencia. En este
caso la sentencia que ejecuta es el if. Para verlo más claro ya te
recomendaron lo de utilizar siempre las llaves, entonces el for
quedaría así

for (p=1; p < 1000; p = p * n)
{
if (p > 500)
{
printf ("%i", p);
}
}
printf ("%i", p);

Al iniciar p tiene el valor 1, y la comprobación de finalización del
for es que este valor sea menor que 1000, por lo que al principio
siempre se ejecutará al menos una vez el for. El valor de n será un
multiplicador, con esta código lo que obtendrás son las potencias del
número indicado (además del valor 1 al principio, claro), ya que lo
que harás es ir multiplicando 1 * n * n * ...

Dentro del bucle for lo que haces es comprobar si el valor de p es
mayor que 500, y si es así lo imprimes.

Cuando p es mayor que 1000 entonces la condición del for no se cumple,
por lo que se sale del bucle e imprime en el siguiente comando el
valor de p, que será mayor de 1000.

En el caso del 6 puedes ver que el valor que imprime es mayor que
1000, por lo que lo ha imprimido el segundo printf. Además, sea cual
sea el valor que le des a n el último número que imprimas será por el
segundo printf, ya que es la última sentencia a ejecutar, y está fuera
del for.

Puede ser que con esta visualización lo veas más claro. Ya sabes, hay
muchas formas de escribir un mismo código, y poniendo las llaves
podrás seguri más facilmente la traza del algoritmo.
Kenzo-Xs
2003-09-12 18:12:20 UTC
Permalink
Muchas gracias por la explicacion pero el programa me lo dan asi y yo tengo
que saber que hace
Ten por seguro que en mis programas pondre las {} para tenser las cosas
claras

Saludos
Post by Winfree
Post by Kenzo-Xs
para 3=729 2187
para 5=625 3125
para 6=1296
para los dos primeros valores (3,5) escribe primero 729 o 625 porque se
cumple que p>500 y despues cumple lo de p<1000 y escribe 2187 o 3125
pero para valor de 6 no se que printf escribe el resultado
Vamos a ver, creo que ya antes te comentaron que el for, si no hay un
bloque de sentencias entre { } sólo ejecuta una sentencia. En este
caso la sentencia que ejecuta es el if. Para verlo más claro ya te
recomendaron lo de utilizar siempre las llaves, entonces el for
quedaría así
for (p=1; p < 1000; p = p * n)
{
if (p > 500)
{
printf ("%i", p);
}
}
printf ("%i", p);
Al iniciar p tiene el valor 1, y la comprobación de finalización del
for es que este valor sea menor que 1000, por lo que al principio
siempre se ejecutará al menos una vez el for. El valor de n será un
multiplicador, con esta código lo que obtendrás son las potencias del
número indicado (además del valor 1 al principio, claro), ya que lo
que harás es ir multiplicando 1 * n * n * ...
Dentro del bucle for lo que haces es comprobar si el valor de p es
mayor que 500, y si es así lo imprimes.
Cuando p es mayor que 1000 entonces la condición del for no se cumple,
por lo que se sale del bucle e imprime en el siguiente comando el
valor de p, que será mayor de 1000.
En el caso del 6 puedes ver que el valor que imprime es mayor que
1000, por lo que lo ha imprimido el segundo printf. Además, sea cual
sea el valor que le des a n el último número que imprimas será por el
segundo printf, ya que es la última sentencia a ejecutar, y está fuera
del for.
Puede ser que con esta visualización lo veas más claro. Ya sabes, hay
muchas formas de escribir un mismo código, y poniendo las llaves
podrás seguri más facilmente la traza del algoritmo.
Winfree
2003-09-12 19:00:16 UTC
Permalink
Post by Kenzo-Xs
Muchas gracias por la explicacion pero el programa me lo dan asi y yo tengo
que saber que hace
Ten por seguro que en mis programas pondre las {} para tenser las cosas
claras
Saludos
Aunque te lo den asin tu puedes pasar en cualquier parte el código que
te quede menos claro a una forma más fácil de leer. Es normal que en
un examen no te pongan el código todo lo claro que se puede poner ;-)

Mi recomendación es que para aprobar un examen de C lo mejor es hacer
un montón de programas, porque ahí es donde aprendes, además de coger
soltura en la resolución de los algoritmos, porque al final es siempre
lo mismo ;-)
Kenzo-Xs
2003-09-12 19:52:21 UTC
Permalink
Post by Winfree
Post by Kenzo-Xs
Muchas gracias por la explicacion pero el programa me lo dan asi y yo tengo
que saber que hace
Ten por seguro que en mis programas pondre las {} para tenser las cosas
claras
Saludos
Aunque te lo den asin tu puedes pasar en cualquier parte el código que
te quede menos claro a una forma más fácil de leer. Es normal que en
un examen no te pongan el código todo lo claro que se puede poner ;-)
te hare caso , mañana pondre si me ponen algo asi le intentare reestructurar
, a ver si asi lo entiendo mejor
Post by Winfree
Mi recomendación es que para aprobar un examen de C lo mejor es hacer
un montón de programas, porque ahí es donde aprendes, además de coger
soltura en la resolución de los algoritmos, porque al final es siempre
lo mismo ;-)
ya pero por culpa de otros examenes no puede estudiar este , porque hacer
programas quita bastante timempo , pero bueno , si suspendo empezare ya a
currarmelo con tiempo

Gracias
Fernando Arbeiza
2003-09-12 18:38:41 UTC
Permalink
Post by Kenzo-Xs
AVISO:No le busqueis imperfecciones ni me digais que de otra manera se haria
mas facil , o que esta mal redactado ... es cosa de mi profesor , que los
pone asi
AVISO: Si en un grupo aparece código es para comentarlo, si no quieres
eso entonces mejor no lo publiques ;-P Mi opinión es que el estilo de tu
profesor es muy discutible; así que, por mi parte, será discutido. Puede
que tu objetivo primero pueda ser contentarle mañana y si te he visto no
me acuerdo, pero puede que haya gente que lea este grupo que quiera
aprender C, y no creo que deba quedar código de este tipo sin comentar
(entre todos, lo mío será sólo una opinión).

Bueno, después de esta parrafada; allá vamos...
Post by Kenzo-Xs
------------------------------
#include <stdio.h>
int n,p;
¿Variables globales? No tiene ningún sentido utilizarlas en este
programa.
Post by Kenzo-Xs
void main(){
También tienen poco sentido que main devuelva void, si el valor más
portable es int.
Post by Kenzo-Xs
scanf("%i",&n);
for (p=1;p<1000;p=p*n) if(p>500) printf("%i ",p);
Personalmente, no me gusta dejar así los for, if... prefiero poner
corchetes, aunque vaya en la misma línea. Si quiero añadir más código,
no se me olvidrá ponerlos. Además, te ayudará a ver mejor lo que hace si
lo primero que haces es reorganizar el código de la forma que te parezca
más cómoda:

for (p = 1;p < 1000;p = p * n) {
if (p > 500) { printf("%i ", p); }
}
Post by Kenzo-Xs
getch();
Utilizar una función no estándar sólo para que la salida pueda verse no
creo que tenga mucho sentido. Además, no es muy aconsejable utilizarla
sin un prototipo a la vista.

Bueno, a lo demás ya te han contestado...

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Kenzo-Xs
2003-09-12 19:55:14 UTC
Permalink
Post by Fernando Arbeiza
Post by Kenzo-Xs
AVISO:No le busqueis imperfecciones ni me digais que de otra manera se haria
mas facil , o que esta mal redactado ... es cosa de mi profesor , que los
pone asi
AVISO: Si en un grupo aparece código es para comentarlo, si no quieres
eso entonces mejor no lo publiques ;-P
No , no queria decir eso , si no que no os tomarais la molestia de
reestructurarlo ni ponerlo de otra manera , pero bueno , en algun caso me ha
servido para enternder mejor la funcion
Gracias

Mi opinión es que el estilo de tu
Post by Fernando Arbeiza
profesor es muy discutible; así que, por mi parte, será discutido. Puede
que tu objetivo primero pueda ser contentarle mañana y si te he visto no
me acuerdo, pero puede que haya gente que lea este grupo que quiera
aprender C, y no creo que deba quedar código de este tipo sin comentar
(entre todos, lo mío será sólo una opinión).
toda la razon
Post by Fernando Arbeiza
Bueno, después de esta parrafada; allá vamos...
Post by Kenzo-Xs
------------------------------
#include <stdio.h>
int n,p;
¿Variables globales? No tiene ningún sentido utilizarlas en este
programa.
Post by Kenzo-Xs
void main(){
También tienen poco sentido que main devuelva void, si el valor más
portable es int.
Post by Kenzo-Xs
scanf("%i",&n);
for (p=1;p<1000;p=p*n) if(p>500) printf("%i ",p);
Personalmente, no me gusta dejar así los for, if... prefiero poner
corchetes, aunque vaya en la misma línea. Si quiero añadir más código,
no se me olvidrá ponerlos. Además, te ayudará a ver mejor lo que hace si
lo primero que haces es reorganizar el código de la forma que te parezca
for (p = 1;p < 1000;p = p * n) {
if (p > 500) { printf("%i ", p); }
}
Post by Kenzo-Xs
getch();
Utilizar una función no estándar sólo para que la salida pueda verse no
creo que tenga mucho sentido. Además, no es muy aconsejable utilizarla
sin un prototipo a la vista.
Bueno, a lo demás ya te han contestado...
Muchas gracias , y un gran saludo
Post by Fernando Arbeiza
Un saludo.
--
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Loading...