~Rdavid~ escribió:Pero no veo que tú hayas hecho algo de eso , supongo que algo debo de haber entendido mal
No, has entendido bien. Lo que pasa es que obviamente el tamaño del vector hay que pasarlo, algo que se me había pasado. Además, eso lo hice basándome en cómo lo habías hecho tú, pero aquí me dices que lo haga yo, así que lo hago a mi manera
void rellenaVector(int vector[]) { int i; for ( i = 0; i < 20; i++) if ( i % 2 == 0) vector[i] = i; else vector[i] = i * -1; }
void rellenaVectorUsuario(int vector[]) { int i; for ( i = 0; i < 20; i++) { printf("\nIntroduce entero-> "); scanf("%d",&vector[i]); } }
void recorreVector(int vector[]) { int i; for ( i = 0; i < 20; i++) printf("%d\n", vector[i]); }
int mayorVector(int vector[], int pos) { static int i = 0; //también podemos usar como static pos
if ( i < 20 ) { if ( vector[pos] < vector[i] ) pos = i; i++; mayorVector(vector, pos); } else return pos; // también return vector[pos] para que pase directamente el número en lugar de la posición }
void main(void) { int vectorEnt[20]; int pos = 0;
rellenaVectorUsuario(vectorEnt); pos = mayorVector(vectorEnt, pos); //Tened en cuenta que la posición que doy es teniendo en cuenta 0..19, si no simplemente es (pos + 1) printf("El mayor es->%d en la posición del vector %d\n",vectorEnt[mayorVector(vectorEnt, pos)], pos); }
m0skit0 escribió:Implementar un programa que busca el número máximo en un vector de 20 enteros con signo introducidos por el usuario usando recursividad
@~Rdavid~:
m0skit0 escribió:Implementar un programa que busca el número máximo en un vector de 20 enteros con signo aleatorios (el signo de cada elemento también debe ser aleatorio) usando recursividad.
//Struct que contiene las variables de cada entrada struct Entradas { int tel; char nombre[30]; int accesos;
};
struct Entradas agenda[20];
//Funcion que muestra el menu y regresa la opcion que se escogió int menu(int opcion, int libre) { system("clear"); printf(" Menu\n\n"); printf("Presione 1 para crear una nueva entrada, libres [%d]\n", libre); printf("Presione 2 para ver las entradas\n"); printf("Presiona 3 para editar una entrada\n"); printf("Presiona 4 para borrar una entrada\n"); printf("Presiona 5 para salir\n");
scanf("%d", &opcion);
return opcion; }
//Funcion registra una nueva entrada regresando el id int nueva_entrada(int id) { printf("Escribe el nombre: "); scanf("%s",agenda[id].nombre); printf("Escribe el numero de telefono: "); scanf("%d", &agenda[id].tel); agenda[id].accesos=1; printf("Su ID es: %d\n", id); printf("Presione enter para regresar al menu\n"); system("read foo");
return id; }
int seleccionar_id(int id, int escog) { //Utiliza la recursividad mientras id sea menor que 20 if(id<20) { if(agenda[id].accesos!=0) { printf("%d ", id); id++;
seleccionar_id(id,escog); } }
printf("\nID: "); scanf("%d", &escog);
return escog; }
//Funcion para ver el id escogido void ver_id(int escog) { if(agenda[escog].accesos == 0||escog<0||escog>20) { printf("ID erronea\n Presione enter para regresar al menu\n"); system("read foo"); } else { printf("Nombre: %s\n",agenda[escog].nombre); printf("Telefono: %d\n\n", agenda[escog].tel); printf("Presione enter para regresar al menu\n"); system("read foo"); } }
//Funcion para editar un id escogido void editar_id(int escog) { if(agenda[escog].accesos == 0||escog<0||escog>20) { printf("ID erronea\n Presione enter para regresar al menu\n"); system("read foo"); } else { printf("Nombre: %s\n",agenda[escog].nombre); printf("Telefono: %d\n\n", agenda[escog].tel);
printf("Escriba el nuevo nombre: "); scanf("%s", agenda[escog].nombre); printf("Escriba el numero de telefono: "); scanf("%d", &agenda[escog].tel); printf("\n"); printf("Presione enter para regresar al menur\n"); system("read foo"); } }
//Funcion que sale del programa al pulsar 5 int menu_salir(int opcion, int salir) { if(opcion!=5) { printf("No has presionado ninguna de las opciones\n"); printf("Presione enter para regresar al menur\n"); system("read foo"); } else { printf("Saliendo...\n"); salir = 0; return salir; } }
//Funcion que le da el valor de 0 a todos los accesos void accesibilidad(int id) { //Utiliza la recursividad mientras id sea menor que 20 if(id<20) { agenda[id].accesos = 0; id++; accesibilidad(id); }
}
int menu_de_seleccion(int busqueda) { system("clear"); printf("Presione 1 para seleccionar por ID\n"); printf("Presione 2 para buscar por nombre\n"); printf("Presione 3 para buscar por numero\n"); scanf("%d", &busqueda);
return busqueda; } //Busca una entrada comparando si el nombre es igual void buscar_nombre(char busc_nombre[], int i) { if(i<20) { //Si existe if(agenda[i].accesos == 1) { //Compara si el nombre es igual (regresa 0) al de la entrada if(strcmp(busc_nombre,agenda[i].nombre)==0) { printf("Nombre: %s\n",agenda[i].nombre); printf("Telefono: %d\n", agenda[i].tel); printf("ID: %d\n\n", i);
}
} i++; buscar_nombre(busc_nombre,i); } } //Busca una entrada comparando si el numero es igual void buscar_numero(int busc_numero, int i) { if(i<20) { //Si se existe if(agenda[i].accesos == 1) { if(busc_numero == agenda[i].tel) { printf("Nombre: %s\n",agenda[i].nombre); printf("Telefono: %d\n", agenda[i].tel); printf("ID: %d\n\n", i);
} } i++; buscar_numero(busc_numero,i); } }
//Funcion principal int main(int argc, char *argv[]) { int libre = 20; int salir =1; int id=0, escog,i=0; int opcion; int busqueda; int busc_numero; char busc_nombre[30];
accesibilidad(id);
//Permite que el menu se repita hasta que se desee salir while(salir==1) {
opcion = menu(opcion, libre);
//Switch con para iniciar cada opcion del menu switch(opcion) { case 1: //Si no hay entradas libres regresa al menu if(libre==0) { printf("No quedan entradas disponibles\n Presiona enter para regresar al menu"); system("read foo"); } else {
id=nueva_entrada(id); id++; libre--; }
break;
case 2: busqueda = menu_de_seleccion(busqueda);
if(busqueda==1) { printf("Seleccione una de las siguientes IDs: "); escog = seleccionar_id(id, escog); //Si la id no ha sido accedida o es < que 0 o > que 20 regresa la menu if(agenda[escog].accesos == 0||escog<0||escog>20) { printf("ID erronea\n Presione enter para regresar al menu\n"); system("read foo"); } ver_id(escog); } else if(busqueda == 2) { printf("Escriba el nombre: "); scanf("%s", busc_nombre); buscar_nombre(busc_nombre,i); printf("Presione entre para regresar al menu \n"); system("read foo"); } else { printf("Escriba el numero: "); scanf("%d", &busc_numero); buscar_numero(busc_numero,i); printf("Presione entre para regresar al menu\n"); system("read foo"); }
break;
case 3: escog = seleccionar_id(id, escog); editar_id(escog);
break;
case 4: escog = seleccionar_id(id, escog); //Si la id no ha sido accedida o es < que 0 o > que 20 regresa la menu if(agenda[escog].accesos == 0||escog<0||escog>20) { printf("ID erronea\n Presione enter para regresar al menu\n"); system("read foo"); } else { printf("Nombre: %s\n",agenda[escog].nombre); printf("Telefono: %d\n\n", agenda[escog].tel);
libre++; agenda[escog].accesos = 0; printf("ID borrado\n"); escog--; printf("Presione enter para regresar al menur\n"); system("read foo"); }
break;
default: //Sala del programa al pulsar 5 salir = menu_salir(opcion, salir); break; } }