[SOLUCIONADO] Programa Sencillo: Representación de un Array

Iniciado por LaLakers94, 2 Mayo 2014, 18:23 PM

0 Miembros y 1 Visitante están viendo este tema.

LaLakers94

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:


void escribeVector(const Vector v, int n){
int i;
for(i=0; i<n; i++){
printf("[%lf]\n", v[i]);
}
}


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

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

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan


¿Algo como esto?:

Código (cpp) [Seleccionar]
[[1],[2],[3],[4],[5]]

Por si te sirve de ayuda:

Código (cpp) [Seleccionar]
printf("[");
  for(i=0; i<5; i++)
      printf("[%i],", v[i]);
  printf("\b]\n");


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

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




amchacon

Cita de: leosansan en  2 Mayo 2014, 20:00 PMEl "\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 (cpp) [Seleccionar]
printf("[[%i] ",v[0]);

for(i=1; i<5; i++)
     printf(",[%i]", v[i]);

printf("]\n");


A mí personalmente lo de retroceder no me gusta.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#4
Cita de: amchacon en  2 Mayo 2014, 20:04 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! ..... !!!!






LaLakers94

#5
Hola, gracias a todos.
Finalmente con lo que me dijo rir3760 hice este codigo:


void escribeVector(const Vector v, int n){ //n = tamaño real del vector v
int i;
printf("[");
for(i=0; i<n; i++){
if(i<n-1){
printf("%lf, ", v[i]);
}else{
printf("%lf]\n", v[i]);
}
}
}


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?

rir3760

Por eficiencia deberías sacar la comprobación fuera del bucle, de esta forma:
for (i = 0; i < n - 1; i++)
   printf("%lf, ", v[i]);
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

Cita de: LaLakers94 en  5 Mayo 2014, 11:48 AM¿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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language