Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LaLakers94 en 2 Mayo 2014, 18:23 pm



Título: [SOLUCIONADO] Programa Sencillo: Representación de un Array
Publicado por: LaLakers94 en 2 Mayo 2014, 18:23 pm
Hola, estoy empezando a programar con C y me he atascado en un problema aparentemente sencillo.

Consiste mostrar los elementos de un vector por pantalla entre corchetes “[...]” y separados por coma (,) mediante la función 'escribirVector' que recibe un vector constante y un valor entero n (este representa el número de elementos reales del vector).

La verdad es que no tengo ni idea. Mi código conciste en esto:

Código
  1. void escribeVector(const Vector v, int n){
  2. int i;
  3. for(i=0; i<n; i++){
  4. printf("[%lf]\n", v[i]);
  5. }
  6. }

Que claro está mal, me devuelve n veces la cadena [Elemento].

¿alguna sugerencia para conseguir el resultado que busco ([e[0],e[1], ... ])?


Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: rir3760 en 2 Mayo 2014, 19:19 pm
Casi lo tienes, solo hay que realizar cambios menores a la función. En pseudocodigo:

1) Imprimir '['
2) (Bucle) Imprimir los primeros N-1 elementos (N == numero de elementos del array) en la forma "i, ".
3) Imprimir el ultimo elemento (si existe) seguido del carácter ']'.

No es difícil, lo resuelves en unos minutos.

Un saludo


Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: leosansan en 2 Mayo 2014, 20:00 pm

¿Algo como esto?:

Código
  1. [[1],[2],[3],[4],[5]]

Por si te sirve de ayuda:

Código
  1. printf("[");
  2.  for(i=0; i<5; i++)
  3.      printf("[%i],", v[i]);
  4.  printf("\b]\n");

El "\b" es para retroceder y que se coma la última coma, vamos que no termine en coma.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: amchacon en 2 Mayo 2014, 20:04 pm
El "\b" es para retroceder y que se coma la última coma, vamos que no termine en coma.
Otra forma es imprimir el primero y despues ir imprimiendo coma + numero:

Código
  1. printf("[[%i] ",v[0]);
  2.  
  3. for(i=1; i<5; i++)
  4.     printf(",[%i]", v[i]);
  5.  
  6. printf("]\n");

A mí personalmente lo de retroceder no me gusta.


Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: leosansan en 2 Mayo 2014, 20:42 pm
Otra forma es imprimir el primero y después ir imprimiendo coma + numero:
....................
A mí personalmente lo de retroceder no me gusta.


Es justo lo contrario a lo que proponía rir3760, imprimir desde el primero hasta el penúltimo, y el último aparte.

Mi propuesta es la más coherente, no imprime ninguno por separado. :laugh:



¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)





Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: LaLakers94 en 5 Mayo 2014, 11:48 am
Hola, gracias a todos.
Finalmente con lo que me dijo rir3760 hice este codigo:

Código
  1. void escribeVector(const Vector v, int n){ //n = tamaño real del vector v
  2. int i;
  3. printf("[");
  4. for(i=0; i<n; i++){
  5. if(i<n-1){
  6. printf("%lf, ", v[i]);
  7. }else{
  8. printf("%lf]\n", v[i]);
  9. }
  10. }
  11. }

Muy similar a lo que me comentáis.

Por cierto, ¿el funcionamiento de '\b' consiste en suprrimir el último caracter? Por ejemplo con la cadena s = "Hola me gustan los Lakers.\n'' podría eliminar el salto de línea concatenándole '\b' a la cadena?


Título: Re: [AYUDA] Programa Sencillo: Representación de un Array
Publicado por: rir3760 en 5 Mayo 2014, 17:49 pm
Por eficiencia deberías sacar la comprobación fuera del bucle, de esta forma:
Código
  1. for (i = 0; i < n - 1; i++)
  2.   printf("%lf, ", v[i]);
  3. printf("%lf]\n", v[i]);
En el raro caso de que el numero de elementos pueda ser menor o igual a cero debes verificar eso antes de imprimir el ultimo elemento

¿el funcionamiento de '\b' consiste en suprrimir el último caracter? Por ejemplo con la cadena s = "Hola me gustan los Lakers.\n'' podría eliminar el salto de línea concatenándole '\b' a la cadena?
No. El efecto de '\b' solo aplica si envías la cadena a la salida estándar, no funcionara si la cadena la almacenas en otro array o la envías a un archivo.

Un saludo