Buenas tardes profesor. Quería hacerle una sugerencia en cuanto a su sitio de internet que si puede ponerle un botón para ir a la siguiente lección y otro para atrás para no tener que regresar al main cada que avanza uno a la siguiente lección. Saludos y gracias por compartir sus conocimientos, me han servido de mucho sus clases.
@gastonrosales94713 жыл бұрын
Hola Diego. Te consulto por un programa de listas simplemente enlazada en lenguaje C. Lo resolví !! pero tengo dudas con el enunciado. Que dice lo siguiente: 1) Codificar una función que sume los elementos de una lista simplemente encadenada que estuvieran en posición impar. Hice el ejercicio me funciona. Pero tengo dudas con las funciones que implemente a) mostrar_posicion_impar() lo hace que los elementos de una lista simplemente encadenada que estuvieran en posición impar. Ejemplo: 1; 4; 5; 1; 14; 3 mostrar la posición de los nodos 4; 1; 3 */ Esto esta bien ? b) suma_impar() me suma los valores que son impares. Pregunta, estaría bien ... ? /******************************************************************************************** ejer 22) TP 3 Codificar una función que sume los elementos de una lista simplemente encadenada que estuvieran en posición impar. ********************************************************************************************/ #include #include #include #include //---------------------------- struct lista { int num; struct lista *sig; struct lista *nuevo; }; //-------------------------------------------------- void armar_lista(struct lista *&com) { //declaro un puntero a struct lista struct lista *p; struct lista *ant; struct lista *sig; int n; printf(" ingrese el primer numero de la lista: "); scanf("%d",&n); fflush(stdin); //si n==0 com apunta a NULL. Ojo !! com debe estar apuntado a NULL if(n==0) com=NULL; else { //creo un nodo para com: "pido un nodo para com por unica vez, esto se hace aparte fuera del ciclo para no perderlo" com= new struct lista; com->num=n; //com apunta num que es n: es un valor numerico que yo ingreso. com->sig=NULL; //com apunta sig que es NULL !!! ant=com; //ahora com apunta a ant printf(" ingrese otro numero de la lista: (0) para terminar "); scanf("%d",&n); fflush(stdin); while(n!=0) { p=new struct lista; //creo el nodo apuntado por p: "pido un nodo para p" p->num=n; //p apunta num que es n: es un valor numerico que yo ingreso. p->sig=NULL; //p apunta sig que es NULL !!!! ant->sig=p; //ant apunta a sig que es p (aca hago el enlace) ant=p; //ahora p apunta a ant printf(" ingrese otro numero de la lista: (0) para terminar "); scanf("%d",&n); fflush(stdin); } } } //----------------------------------------------------------------------- void mostrar_lista(struct lista *com) { struct lista *p; p=com; while(p!=NULL) { printf(" %d",p->num); p=p->sig; } } //------------------------------------------------------------------------------------------ /* Elementos de una lista simplemente encadenada que estuvieran en posición impar. ejemplo: una lista 1; 4; 5; 1; 14; 3 mostrar la posción de los nodos 4; 1; 3 */ void mostrar_posicion_impar(struct lista *com) { struct lista *p; p=com; if(com==NULL ) printf(" lista vacia "); else printf(" hay uno en la lista... "); printf(" "); if(com->sig !=NULL ) //si no coloco esta sentencia: p=com->sig; puede recorrer la lista de los que estan en posicion impar p=com->sig; // si tengo por los menos uno o dos o más nodos en la poscion par. while(p!=NULL) { printf(" %d",p->num); p=p->sig; if(p!=NULL) p=p->sig; } //podria colocar un else que me diga hay uno solo !!!! printf(" "); printf(" la lista tiene un solo nodo "); printf(" "); } //------------------------------------------------------- int suma_impar(struct lista *com) { struct lista *p; int res; p=com; res=0; while(p!=NULL) { if(p->num % 2 !=0) //aca digo si el valor que esta en la lista es impar o no. Si es impar los suma !! res=res+p->num; p=p->sig; } return res; } //------------------------------------------------------------ void leer_numero(char cade[30], int &a) { printf(" %s:",cade); scanf("%d",&a); fflush(stdin); } //------------------------------------------ void pausar() { printf(" "); system("pause"); } //-------------------------------------------------------- int main() { printf("___________________________________________________ "); printf(" "); struct lista *comienzo; //NO hace falta hacer esta sentencia. No es ncesario pedir un nodo ya lo tenemos !!! // comienzo = new struct lista; //pido un nodo //llamo al procediento y le paso el parámetro armar_lista(comienzo); //llamo al procedimiento y le paso el parámetro //mostrar_lista(comienzo); printf(" mostrar posicion impar "); printf(" "); mostrar_posicion_impar(comienzo); printf(" "); printf(" Sumo la cantidad de numeros impares %d",suma_impar(comienzo)); printf(" "); printf("____________________________________________________ "); pausar(); return 0; } gracias !!
@diegomoissetdeespanes3 жыл бұрын
En principio veo correcto los dos algoritmos: - Imprimir los nodos de las posiciones impares - Sumar todos los nodos que tienen un valor impar.
@tomasslootmans Жыл бұрын
Que grande cordobé, tremenda obra la suya y lo que brinda a los que queremos aprender esta disciplina. No tiene precio. Abrazo desde entre ríos maestro!!