El siguiente programa debe crear una lista de los primeros 100 numeros pares y luego mostrar la suma total de todos los numeros, el problema es que no se esta imprmiendo nada en pantalla.
#include <stdlib.h>
#include <stdio.h>
typedef struct punt{
int dato;
struct punt *sig;
}nodo;
typedef nodo *pt;
void insertar(pt *lista, int i);
void suma(pt *lista);
void mostrar(pt *lista);
main(){
int i;
pt lista=NULL;
for(i=1;i<=200;i++){
insertar(&lista,i);
}
suma(&lista);
mostrar(&lista);
system("pause");
}
void insertar(pt *lista, int i){
pt nuevo,ultimo;
nuevo=(pt)malloc(sizeof(nodo));
do{
nuevo->dato=i;
if(*lista==NULL){
nuevo->sig=NULL;
*lista=nuevo;
}
else{
ultimo=*lista;
if(lista!=NULL){
while(ultimo->sig!=NULL){
ultimo=ultimo->sig;
}// cierre while
nuevo->sig=NULL;
ultimo->sig=nuevo;
}// cierre if
}// cierre else
}while(i%2==0);
}// cierre funcion
void suma(pt *lista){
int total=0;
pt aux;
if(*lista!=NULL){
aux=*lista;
do{
total+=aux->dato;
aux=aux->sig;
}while(aux->sig!=NULL);
}//cierre if
printf("\n\n Total de la lista: %d",total);
}//cierre funcion
void mostrar(pt *lista){
pt aux=*lista;
if(*lista!=NULL){
while(aux!=NULL){
printf("\n\n Valores pares : %d\t",aux->dato);
aux=aux->sig;
}//cierre while
}//cierre if
}//cierre funcion
Hola! el problema esta en la funcion insertar(), el do-while esta demas(no es necesario), ademas con esa condicion estas creando un bucle infinito cuando el numero es par... Si queres crear una lista con numeros pares la condicion principal debe ser:
if(i%2==0) {
...... /* crear lista */
}
Otra cosa:
if(lista!=NULL)
esta condicion no es necesario, ya que una vez ingresado al else la lista siempre va a ser distinto de NULL
Saludos
Ahora si funciona correctamente, gracias.
Hola pruebalo ahora hice unas correcciones pequeñas solamente saludos ;D
#include <stdlib.h>
#include <stdio.h>
typedef struct punt{
int dato;
struct punt *sig;
}nodo;
void insertar(nodo **lista,int i);
void suma(nodo **lista);
void mostrar(nodo **lista);
int main(void){
int i;
nodo *lista=NULL;
for(i=1;i<=100;i++){
if(i%2==0)
insertar(&lista,i);
}
mostrar(&lista);
suma(&lista);
system("pause");
return(0);
}
void insertar(nodo **lista, int i){
nodo *nuevo,*ultimo;
nuevo=(nodo*)malloc(sizeof(nodo));
nuevo->dato=i;
if(*lista==NULL){
nuevo->sig=NULL;
*lista=nuevo;
}else{
ultimo=*lista;
while(ultimo->sig!=NULL)
ultimo=ultimo->sig;
// cierre while
ultimo->sig=nuevo;
nuevo->sig=NULL;
// cierre if
}// cierre else
}// cierre funcion
void suma(nodo **lista){
int total=0;
nodo *aux;
if(*lista!=NULL){
aux=*lista;
while(aux->sig!=NULL){
total+=aux->dato;
aux=aux->sig;
}
}//cierre if
printf("\nTotal de la lista: %d\n",total);
}//cierre funcion
void mostrar(nodo **lista){
nodo *aux=*lista;
if(*lista!=NULL){
while(aux!=NULL){
printf("[%d]\n",aux->dato);
aux=aux->sig;
}//cierre while
}//cierre if
}//cierre funcion