Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pino1952 en 01 de Noviembre 2014, 15:10
-
Hola, y que tengan un muy buen día.
creo que en el enunciado está resumido lo que no supe responder a la pregunta que encontré en el libro con el que estoy estudiando C.-
Bueno es todo, ¿se entiende, se puede?.-
Saludos.
Daniel
-
Hola, puedes hacer operaciones con vectores, matrices, tablas, etc. sin usar for mediante el uso de recursión. Por tanto la respuesta es "sí se puede, usando recursión"
Aquí tienes algunas referencias sobre recursión:
Concepto de recursividad: https://www.aprenderaprogramar.com/foros/index.php?topic=1493
Recorrer recursivamente matrices o tablas: www.aprenderaprogramar.com/foros/index.php?topic=814
Trabajo con matrices recursivas: www.aprenderaprogramar.com/foros/index.php?topic=1195
Ejemplo de recursividad en C: https://www.aprenderaprogramar.com/foros/index.php?topic=926
Crea el código y pégalo hasta donde puedas llegar, a partir de ahí intentaremos ayudarte a mejorarlo.
Salu2!
-
Hola Ogramar.
Un gusto conocerte, unas cosas para aclarar, el primer enlace es un post que yo mismo di de alta por mis dudas en cuanto a la recursión que si bien todavía persisten, tengo algunos conceptos bastante claro gracias a la ayuda de Alex, me gustó muchísimo la idea de sumar las columnas de una matriz con recursividad, solo que no sé si me voy a animar siquiera a intentarlo, veremos.-
En cuanto a la manera que yo preguntaba encontré un blog con el título
“Usar un array de una dimensión como si fuera de dos” me puse a practicar y parece que lo logré, a continuación dejo el código que está recién finalizado, acepto sugerencias para mejorarlo.-
/*
Usar un array de una dimensión como si fuera de dos
El programa suma todas las columnas del array con un sólo bucle for.
*/
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define FILAS 5
#define COLUMNAS 10
void llenar(int arreglo[], int elementos);
void mostrar(int arreglo[], int elementos);
void sumar(int arreglo[], int elementos);
int main(int argc,char **argv){
int elementos = FILAS * COLUMNAS, arreglo[elementos];
llenar(arreglo, elementos);
mostrar(arreglo, elementos);
sumar(arreglo, elementos);
return EXIT_SUCCESS;
}
void llenar(int arreglo[], int elementos){
unsigned int hora = time(NULL), i;
srand(hora);
for(i=0; i < elementos; i++){
arreglo[i] = rand()% 100;;
}
}
void mostrar(int arreglo[], int elementos){
int i;
for(i=0; i < elementos; i++){
(i%COLUMNAS == 0) ? printf("\n") : printf("");
printf(" %3d ", arreglo[i]);
}
}
void sumar(int arreglo[], int elementos){
int fila=0, columna=0, i, resultado=0;
printf("\n---------------------------------\n");
for(i=0; i < elementos; i++){
resultado += arreglo[fila+columna];
columna += COLUMNAS;
if((i+1) % FILAS == 0){
printf(" %d ", resultado);
resultado = 0;
fila++; columna=0;
}
}
}
Saludos.
Daniel
-
Hola, perdona pero no me había dado cuenta del post que iniciaste tú mismo. He visto el código y no le veo ninguna pega. Está bien pensado y bien construido y te permite simular un array de dos dimensiones usando un array de una sola dimensión, por tanto resuelve lo que pedía el ejercicio. Además es un buen ejemplo de uso del operador módulo (%). Otra cosa sería si te hubieran pedido sumar los elementos de una matriz sin usar bucles, ahí es cuando creo que no quedaría otra opción que usar recursividad (aunque pensando pensando siempre se llega a nuevas soluciones alternativas). La recursividad es compleja, por lo que si prefieres dejarla de lado de momento puedes hacerlo, ya que puedes aprender mucha programación sin necesidad de usarla. De todas formas, si aprendes a usarla verás que también es una herramienta interesante para los programadores.
Salu2
-
Hola, la recursividad es muy similar a Goto, a diferencia de que en vez de llamar a una etiqueta, simplemente la llamada se hace a la misma función.
Saludos!