potreste aiutarmi con questo esercizio

Stato
Discussione chiusa ad ulteriori risposte.

Bernardo Chiaravalli

Nuovo Utente
63
6
Salve.
sto iniziando ad imparare a programmare in C su visual studio. Dopo diversi esercizi su medie e funzioni risolti mi sono imbattuto in questo:

Dato un array statico a e uno dinamico b delle stesse dimensioni, scrivere una funzione che:
• a. Ritorni un nuovo array contenente la somma per componenti di a+b
• b. Ritorni il prodotto per componenti dei due array direttamente sull’array a.

Sono molto in difficoltà, sapreste darmi un aiuto o indirizzare a qualcosa di simile già svolto. non riesco a risolverlo.
Grazie a tutti per l'aiuto

Ciao a tutti.
Ho creato questo programma con una lista collegata con puntatori; questo dovrebbe accettare dei valori, stamparli su console, calcolarne il totale e infine farne la media. I punti vengono eseguiti tutti meno l'ultimo.
Ho difficoltà in particolare con la dichiarazione delle tre variabili che terminano con "= ..." dentro a "int main": ho provato diverse sostituzioni senza successo. Magari ci sono altri errori che non riesco a vedere. Potreste gentilmente darmi una mano?
allego il codice.
Grazie a tutti!

Codice:
#include <stdio.h>
#include <malloc.h>
#include "stdafx.h"



//struttura della lista: preimpostata da C (studiala e basta)
struct elemento {
    int inf;
    struct elemento *next;
};


struct elemento *crea_lista();
void visualizza_lista(struct elemento*);
int totaleInf(struct elemento*);


int main()
    {
        struct elemento *lista; // puntatore della lista
        lista = crea_lista(); // crea la lista
        visualizza_lista(lista); // stampa la lista
        printf("%d\n", totaleInf(lista));
        printf("%d\n", numeroinf(lista));

        int numero = 
        int totale =
        float media = 
    }




// strumenti per scorrere la lista:
struct elemento *crea_lista()
{
    struct elemento *p, *punt;
    int i, n;
    // permetto all'utente di aggiungere elementi alla mia lista
    printf("Specificare il numero di elementi... ");
    scanf("%d", &n);

    if (n == 0)
    {
        p = NULL; // lista vuota

    }
    else {
        /* creazione primo elemento */
        p = (struct elemento *)malloc(sizeof(struct elemento));
        printf("Inserisci il primo valore: ");
        scanf("%d", &p->inf);

        punt = p;
        // se la lista non è vuota ggiungo il primo elemento
        /* creazione elementi successivi */
        for (i = 1; i < n; i++)
        {
            punt->next = (struct elemento *)malloc(sizeof(struct elemento));
            punt = punt->next;
            printf("Inserisci il %d elemento : ", i + 1);
            scanf("%d", &punt->inf);
        } // chiudo il for

        punt->next = NULL; // marcatore fine lista

    } // chiudo l’if-else
    return(p);
} // chiudo la funzione

void visualizza_lista(struct elemento *p)
{
    printf("%s", "lista = ");

    // ciclo di scansione
    while (p != NULL)
    {
        printf("%d ", p->inf); // visualizza l’informazione  
        p = p->next; // scorre di un elemento
    }

    printf("%c", '\n');
}

int totaleInf(struct elemento * p) {
    printf("%s", "totale = ");

    int totale = 0;

    while (p != NULL)
    {
        totale += p->inf;
        p = p->next;
    }

    return totale;
}

int numeroinf(struct elemento * p) {
    printf("%s", "numero = ");

    int numero = 0;

    while (p != NULL)
    {
        numero += 1;
        p = p->next;
    }
    return numero;
}
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Salve.
sto iniziando ad imparare a programmare in C su visual studio. Dopo diversi esercizi su medie e funzioni risolti mi sono imbattuto in questo:

Dato un array statico a e uno dinamico b delle stesse dimensioni, scrivere una funzione che:
• a. Ritorni un nuovo array contenente la somma per componenti di a+b
• b. Ritorni il prodotto per componenti dei due array direttamente sull’array a.

Sono molto in difficoltà, sapreste darmi un aiuto o indirizzare a qualcosa di simile già svolto. non riesco a risolverlo.
Grazie a tutti per l'aiuto

Ciao a tutti.
Ho creato questo programma con una lista collegata con puntatori; questo dovrebbe accettare dei valori, stamparli su console, calcolarne il totale e infine farne la media. I punti vengono eseguiti tutti meno l'ultimo.
Ho difficoltà in particolare con la dichiarazione delle tre variabili che terminano con "= ..." dentro a "int main": ho provato diverse sostituzioni senza successo. Magari ci sono altri errori che non riesco a vedere. Potreste gentilmente darmi una mano?
allego il codice.
Grazie a tutti!

Codice:
#include <stdio.h>
#include <malloc.h>
#include "stdafx.h"



//struttura della lista: preimpostata da C (studiala e basta)
struct elemento {
    int inf;
    struct elemento *next;
};


struct elemento *crea_lista();
void visualizza_lista(struct elemento*);
int totaleInf(struct elemento*);


int main()
    {
        struct elemento *lista; // puntatore della lista
        lista = crea_lista(); // crea la lista
        visualizza_lista(lista); // stampa la lista
        printf("%d\n", totaleInf(lista));
        printf("%d\n", numeroinf(lista));

        int numero =
        int totale =
        float media =
    }




// strumenti per scorrere la lista:
struct elemento *crea_lista()
{
    struct elemento *p, *punt;
    int i, n;
    // permetto all'utente di aggiungere elementi alla mia lista
    printf("Specificare il numero di elementi... ");
    scanf("%d", &n);

    if (n == 0)
    {
        p = NULL; // lista vuota

    }
    else {
        /* creazione primo elemento */
        p = (struct elemento *)malloc(sizeof(struct elemento));
        printf("Inserisci il primo valore: ");
        scanf("%d", &p->inf);

        punt = p;
        // se la lista non è vuota ggiungo il primo elemento
        /* creazione elementi successivi */
        for (i = 1; i < n; i++)
        {
            punt->next = (struct elemento *)malloc(sizeof(struct elemento));
            punt = punt->next;
            printf("Inserisci il %d elemento : ", i + 1);
            scanf("%d", &punt->inf);
        } // chiudo il for

        punt->next = NULL; // marcatore fine lista

    } // chiudo l’if-else
    return(p);
} // chiudo la funzione

void visualizza_lista(struct elemento *p)
{
    printf("%s", "lista = ");

    // ciclo di scansione
    while (p != NULL)
    {
        printf("%d ", p->inf); // visualizza l’informazione
        p = p->next; // scorre di un elemento
    }

    printf("%c", '\n');
}

int totaleInf(struct elemento * p) {
    printf("%s", "totale = ");

    int totale = 0;

    while (p != NULL)
    {
        totale += p->inf;
        p = p->next;
    }

    return totale;
}

int numeroinf(struct elemento * p) {
    printf("%s", "numero = ");

    int numero = 0;

    while (p != NULL)
    {
        numero += 1;
        p = p->next;
    }
    return numero;
}
Perchè usi una struct?
Bastano due array a e b
Li inizializzi con dei numeri

C:
funzione somma(){

ciclo da i = 0 a N
   c = a + b

return c

}

funzione prodotto(){
     
ciclo da i = 0 a N
   a[i]= a[i] * b[i]

}
 
  • Mi piace
Reazioni: _Achille

Bernardo Chiaravalli

Nuovo Utente
63
6
perché l'esercizio richiedeva una lista a valori interi collegati con puntatori

ho un problema con la dichiarazione di quelle tre variabili. continua a non riuscirmi
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Io mica ho capito dove starebbe il problema. Ovvio che ti da errore se lasci l’uguale senza valore
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Comunque @Ibernato ha ragione, hai elencato due problemi diversi, lui si riferisce al primo
 
  • Mi piace
Reazioni: Ibernato

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
perché l'esercizio richiedeva una lista a valori interi collegati con puntatori
Aspetta, forse tu stai confondendo i puntatori con la lista linkata.
L'array è già un puntatore di per sè in C, quindi può essere acceduto in diversi modi (rivediti i puntatori)

La lista linkata invece è un altro discorso.
E' composta da nodi con un campo valore ed un campo next che punta al prossimo nodo.

Quale dei due casi devi fare per svolgere l'esercizio?
 

Bernardo Chiaravalli

Nuovo Utente
63
6
avevo postato due diversi problemi che sono stati accorpati dall'amministratore del forum credo.
Le tre variabili che hanno solo l'uguale (secondo problema, quello col codice allegato) sono rimaste incomplete perché qualunque cosa io ci abbia sostituito il compilatore o mi da errore e non risolve l'ultimo problema; il programma funziona: esegue la somma e stampa somma e valori. però non so perché non mi calcola la media.

per quanto riguarda il primo problema per ora brancolo nel buio
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
avevo postato due diversi problemi che sono stati accorpati dall'amministratore del forum credo.
Le tre variabili che hanno solo l'uguale (secondo problema, quello col codice allegato) sono rimaste incomplete perché qualunque cosa io ci abbia sostituito il compilatore o mi da errore e non risolve l'ultimo problema; il programma funziona: esegue la somma e stampa somma e valori. però non so perché non mi calcola la media.

per quanto riguarda il primo problema per ora brancolo nel buio
Posta le tracce scritte in modo decente, grazie
 

Bernardo Chiaravalli

Nuovo Utente
63
6
traccia 1:
Data una lista di valori interi in forma collegata con puntatori, scrivere una funzione che Calcoli la media dei valori e la loro deviazione standard

traccia 2:
Dato un array statico a e uno dinamico b delle stesse dimensioni, scrivere una funzione che:
• a. Ritorni un nuovo array contenente la somma per componenti di a+b
• b. Ritorni il prodotto per componenti dei due array direttamente sull’array a.

queste sono le due tracce sulle quali sto lavorando
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
traccia 2:
Dato un array statico a e uno dinamico b delle stesse dimensioni, scrivere una funzione che:
• a. Ritorni un nuovo array contenente la somma per componenti di a+b
• b. Ritorni il prodotto per componenti dei due array direttamente sull’array a.

queste sono le due tracce sulle quali sto lavorando
Su questo hai risolto? Aggiungi i problemo che hai per ognuno
 

Bernardo Chiaravalli

Nuovo Utente
63
6
Al momento sto lavorando alla traccia 1: ho una lista collegata con puntatori che stampa su console la somma di questi. però il contatore degli elementi non funziona e la media non viene calcolata
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Al momento sto lavorando alla traccia 1: ho una lista collegata con puntatori che stampa su console la somma di questi. però il contatore degli elementi non funziona e la media non viene calcolata
Ovvero le due ultime funzioni non vanno? Scusami faccio fatica a capire, anche perché non vedo alcun corpo che rappresenti una media e ci sono variabili da essere inizializzate lasciate la
 

Bernardo Chiaravalli

Nuovo Utente
63
6
stavo pensando. scusami se scrivo assurdità; costruisco due cicli while: uno che mi sommi i valori della lista, l'altro che me li conti. i valori restituiti da queste due operazioni li utilizzo per calcolare la media dividendoli uno per l'altro

solo che qualunque soluzione io abbia provato non funziona
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
stavo pensando. scusami se scrivo assurdità; costruisco due cicli while: uno che mi sommi i valori della lista, l'altro che me li conti. i valori restituiti da queste due operazioni li utilizzo per calcolare la media dividendoli uno per l'altro

solo che qualunque soluzione io abbia provato non funziona
Basta un solo ciclo finchè il next non è null.
Scorri la lista e ad ogni iterazione aggiorni la somma ed incrementi un contatore.
Alla fine fai somma diviso il contatore ed hai la media...

C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct node {
   int data;
   struct node *next;
};

struct node *head = NULL;
struct node *current = NULL;

//calcola la media
void media() {
   struct node *ptr = head;
   float somma = 0;
   int lung = 0.0;
   float media = 0;
   while(ptr != NULL) {
      somma+= ptr->data;
      lung++;
      ptr = ptr->next;
   }
   media = somma / lung;
   printf("La media è %.2f", media);
}

//inserisci un nuovo elemento in lista
void insert(int data) {
   //create a link
   struct node *link = (struct node*) malloc(sizeof(struct node));
   
   link->data = data;
   
   link->next = head;
   
   head = link;
}


int length() {
   int length = 0;
   struct node *current;
   
   for(current = head; current != NULL; current = current->next) {
      length++;
   }
   
   return length;
}

int main() {
   insert(10);
   insert(20);
   insert(30);
   insert(1);
   insert(40);
   insert(56);
   media();
  return 0;
}

Cerca di impegnarti di più.
Queste strutture dati sono molto utili
 
Ultima modifica:
  • Mi piace
Reazioni: _Achille
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili