elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  for y do while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: for y do while  (Leído 2,603 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
for y do while
« en: 30 Junio 2013, 23:01 pm »

saludos tengo que hacer un programa que me calcule la multiplicacion de 2 matrices de diferentes dimensiones, ya se como hacer la multiplicacion pero tengo una duda en la parte donde le tienes que ingresar las filas y columnas de la matriz a y las filas y columnas de la matriz b

Código
  1.  
  2.        printf("Dame el numero de filas de a :");
  3.        scanf("%d",&n);
  4.        printf("Dame el numero de columnas de a : ");
  5.        scanf("%d",&m);
  6.        printf("Dame el numero de filas de b :");
  7.        scanf("%d",&n2);
  8.        printf("Dame el numero de columnas de b : ");
  9.        scanf("%d",&m2);
  10.  


estaba pensando que para no repetir el mismo codigo para a y a para b alomejor podria utilizar un do-while para ingresar los datos:

Código
  1.  
  2.  int n[2],m[2];
  3.  char letra[] = {'a','b'};
  4.  int  i=0;
  5.    do
  6.    {
  7.        printf("Dame el numero de filas de %c :",letra[i]);
  8.        scanf("%d",&n[i]);
  9.        printf("Dame el numero de columnas de %c : ",letra[i]);
  10.        scanf("%d",&m[i]);
  11.        system("cls");
  12.        i++;
  13.    }while(i < 2);

cual de las dos opciones creen que es la mejor??
gracias


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: for y do while
« Respuesta #1 en: 30 Junio 2013, 23:06 pm »

Es buena práctica trabajar así, si después quieres cambiar las 2 matrices por 27 no habrá problema  ;)

¿Desventajas? Bueno pierdes un pelín de rendimiento, pero es despreciable (un nanosegundo?).


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: for y do while
« Respuesta #2 en: 1 Julio 2013, 00:00 am »

cual de las dos opciones creen que es la mejor??
Cualquiera es buena, aunque yo recomiendo, en este caso, el for.
Así, digamos que queda más legible el "i++".
Lo encapsulas todo dentro de el mismo FOR, evitando poner el i++ por ahí.
Además, defines la variable i dentro de el mismo for, más sencillo
"for(int i=0;i<2;i++){}"

Pero es mi opinión.

En cuento a rendimiento, lo que dijo amchacon.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: for y do while
« Respuesta #3 en: 1 Julio 2013, 08:07 am »

Yo fíjate que propondría una tercera forma... ponerlo en una función independiente.

En el mundo de la programación se le puede sacar bastante rendimiento al "divide y vencerás".

Código
  1. void CreaMatriz( char letra, int* filas, int* columnas )
  2. {
  3.  system("cls");
  4.  printf("Dame el numero de filas de %c :", letra);
  5.  scanf("%d",filas);
  6.  printf("Dame el numero de columnas de %c : ", letra);
  7.  scanf("%d",columnas);
  8. }

En este caso la función es sumamente simple... pero nunca está de más adquirir buenas costumbres a la hora de programar.

Mi experiencia es que generalmente los profesores se preocupan más de que la gente conozca las funciones del lenguaje que de que enseñar buenos hábitos.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: for y do while
« Respuesta #4 en: 1 Julio 2013, 13:20 pm »

Pues fíjate Eferion, eso último que has puesto no me convence nada. Hacer una iteración sobre una función me parece un desperdicio de rendimiento.

Sí es cierto que a la hora de pedir datos el rendimiento no es importante, pero es una manía mía ;)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: for y do while
« Respuesta #5 en: 1 Julio 2013, 13:41 pm »

La verdad, el procedimiento que propone Eferion me parece también abstante bueno. E incluso podría hacerse un bucle while/for para llamarlo, suponiendo que hubiera muchas letras.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: for y do while
« Respuesta #6 en: 1 Julio 2013, 13:48 pm »

Pues fíjate Eferion, eso último que has puesto no me convence nada. Hacer una iteración sobre una función me parece un desperdicio de rendimiento.

Sí es cierto que a la hora de pedir datos el rendimiento no es importante, pero es una manía mía ;)

Cuando compiles en modo release el compilador, al optimizar, seguramente convierta esa función en inline, ya que no tiene bucles ni condicionales... overhead cero. Si eso no te convence piensa que un bucle for o while tiene saltos igualmente...

En cualquier caso es lo que digo... las prácticas de programación son un momento perfecto para aprender buenos hábitos. Es como cuando te sacas el carnet... ningún conductor se tira 45 minutos dando vueltas por las calles más puñeteras de una ciudad para no ir a ningún sitio... esto es igual... vale que la función quizás no merezca la pena en términos de productividad, mantenimiento y rendimiento... pero son habilidades y hábitos que adquieres al aprender y eso te ayuda a evitar malos vicios después.
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: for y do while
« Respuesta #7 en: 1 Julio 2013, 17:10 pm »

hay alguna manera de poder hacer lo mismo con los siguientes dos fors??

Código
  1. for(i=0;i < n[0];i++)
  2.        {
  3.            for(j=0;j < m[0];j++)
  4.            {
  5.                printf("Dame el elemento (%d,%d) de a:\n",i,j);
  6.                scanf("%d",&a[i][j]);
  7.                system("cls");
  8.            }
  9.        }
  10.        for(i=0;i < n[1];i++)
  11.        {
  12.            for(j=0;j < m[1];j++)
  13.            {
  14.                printf("Dame el elemento (%d,%d) de b:\n",i,j);
  15.                scanf("%d",&b[i][j]);
  16.                system("cls");
  17.            }
  18.        }
es que tambien me parece demasiado repetitivo el codigo, ingresarle para una matriz, luego ingresarle para otra.. seria bueno hacerlo con una funcion como dijo eferion???
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: for y do while
« Respuesta #8 en: 1 Julio 2013, 17:26 pm »

a y b entiendo que son matrices dinámicas, no?

Código
  1. int** a, b;

o las estás declarando con un tamaño estático y rezas para que el usuario no pida un tamaño superior al que has definido ??

Lo pregunto porque las soluciones serían ligeramente diferentes.

es que tambien me parece demasiado repetitivo el codigo, ingresarle para una matriz, luego ingresarle para otra.. seria bueno hacerlo con una funcion como dijo eferion???

Yo solo hice una apreciación y es que aprender a dividir el código en funciones no es siempre una tarea fácil... practicarlo con ejemplos sencillos ayuda luego a desenvolverse con códigos más complejos... pero no deja de ser una decisión tuya si pones funciones o todo junto.

El código puede funcionar igual de bien... otra cosa es lo que tu practiques y, en consecuencia, aprendas, al hacer estas prácticas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines