Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]Chiusura del programma

    Traccia : Leggere n e costruire una lista di n numeri casuali compresi da 1 e 9.Stampare la lista.Costruire una seconda lista in cui ogni elemento x della prima lista sia ripetuto x volte,stampare la seconda lista.
    Esempio.
    Sia n = 5 e supponiamo che la prima lista sia la seguente:
    4--->2--->1--->5--->NULL
    Viene generata la seguente lista:
    4--->4--->4--->4--->2--->2--->1--->5--->5--->5--->5--->5--->NULL
    Importante:Organizzare il programma in funzioni(una per generare la prima lista,una per costruire la seconda lista,una per stampare.)Non utilizzare arrey o lista ausiliari,non introdurre variabili goblali.
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    struct nodo *crealista();
    struct nodo2 *crealista2();
    void printlista(struct nodo *p);
    void printlista2(struct nodo2 *p);
    struct nodo {
    int dato;
    struct nodo *next;
    };
    struct nodo2 {
    int dato;
    struct nodo2 *next;
    };
    main()
    {
    struct nodo *start;
    struct nodo2 *start2;
    start = crealista();
    printlista(start);
    start2 = crealista2();
    printlista2(start2);
    system("pause");
    return 0;
    }
    struct nodo *crealista()
    {
    struct nodo *p,*start,*last;
    int n,i,x;
    srand(time(NULL));
    start = NULL;
    printf("Quanti nodi ha la lista?");
    scanf("%d",&n);
    for(i=0;i<n;i++){
    x = rand() % 9+1;
    p = (struct nodo *)malloc(sizeof(struct nodo));
    if (i==0)
    start = p;
    else
    last->next = p;
    p->dato = x;
    p->next = NULL;
    last = p;
    }
    return (start);
    }
    struct nodo2 *crealista2()
    {
    struct nodo2 *p2,*start2,*last2;
    struct nodo *p;
    int i,x2;
    start2 = NULL;
    while(p!==NULL){
    x2=p->dato;
    for(i=0;i<x2;i++){
    p2=(struct nodo2*)malloc(sizeof(struct nodo2));
    if(i==0)
    start=p2;
    else
    last2->next=p2;
    p2->dato = x2;
    p2->next = NULL;
    last2 = p2;
    }
    p = p->next;
    }
    return(start2);
    }
    void printlista(struct nodo *p)
    {
    while(p != NULL){
    printf("%d ---> ",p->dato);
    p = p->next;
    }
    printf("NULL");
    return;
    }

    Io ho provato a farlo cosi ma quando crea la seconda lista mi si chiude il programma,sapete come risolverlo?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se presenti il codice in quel modo, non si capisce nulla ...

    Usa i tag CODE e indenta il codice in modo che diventi leggibile ...

    In ogni caso, se il programma crasha è quasi sempre per un puntatore sbagliato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    struct nodo *crealista();
    struct nodo2 *crealista2();
    void printlista(struct nodo *p);
    void printlista2(struct nodo2 *p);
    struct nodo {
    int dato;
    struct nodo *next;
    };
    struct nodo2 {
    int dato;
    struct nodo2 *next;
    };
    main()
    {
    struct nodo *start;
    struct nodo2 *start2;
    start = crealista();
    printlista(start);
    start2 = crealista2();
    printlista2(start2);
    system("pause");
    return 0;
    }
    struct nodo *crealista()
    {
    struct nodo *p,*start,*last;
    int n,i,x;
    srand(time(NULL));
    start = NULL;
    printf("Quanti nodi ha la lista?");
    scanf("%d",&n);
    for(i=0;i<n;i++){
    x = rand() % 9+1;
    p = (struct nodo *)malloc(sizeof(struct nodo));
    if (i==0)
    start = p;
    else
    last->next = p;
    p->dato = x;
    p->next = NULL;
    last = p;
    }
    return (start);
    }
    struct nodo2 *crealista2()
    {
    struct nodo2 *p2,*start2,*last2;
    struct nodo *p;
    int i,x2;
    start2 = NULL;
    while(p!==NULL){
    x2=p->dato;
    for(i=0;i<x2;i++){
    p2=(struct nodo2*)malloc(sizeof(struct nodo2));
    if(i==0)
    start=p2;
    else
    last2->next=p2;
    p2->dato = x2;
    p2->next = NULL;
    last2 = p2;
    }
    p = p->next;
    }
    return(start2); 
    }
    void printlista(struct nodo *p)
    {
    while(p != NULL){
    printf("%d ---> ",p->dato);
    p = p->next;
    }
    printf("NULL");
    return;
    }
    Cosi va bene?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... non è indentato ... non vedi che è "piatto" e con le linee attaccate l'una all'altra?
    Dove iniziano le funzioni? Dove finiscono? Quando e dove viene chiamata la funzione che crea la seconda lista? Qual è questa funzione?

    Individuare i blocchi significa perderci tempo e pochi sono disposti a farlo in un forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.