Torna indietro   Hardware Upgrade Forum > Software > Programmazione

KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC lancia il nuovo monitor gaming H27E6, un modello da 27 pollici che promette prestazioni estreme grazie al pannello Fast IPS con risoluzione 2K QHD (2560x1440). Il monitor si posiziona come una scelta cruciale per gli appassionati di eSport e i professionisti creativi, combinando una frequenza di aggiornamento di 300Hz e un tempo di risposta di 1ms con un'eccezionale fedeltà cromatica
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-05-2005, 19:45   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[C] perchè questa benedetta funzione dà errori su errori?!?!

Ciao,
oddioo l'esame si avvicina (è su carta, non deve girare eil proff guarda più che altro la logica che ci stà dietro)....questo era il primo esercizio di un vecchio esame...esercizio a sbarramento...ovvero se non si prendono 7 punti su 10 su questo puoi anche aver fatto gli altri esercizzi tutti perfetti ma sei tristemente bocciato...

Come logica ci dovrei essere...perchè ad occhio e croce è la stessa usata dal proff nella soluzione ma non mi gira e il compilatore dà vari errori...

Potete dirmi cosa ci sia di sbagliato e se come logica ci stà?

Codice:
/* La funzione int Comp(LStr *L) riceve il puntatore al primo nodo della lista
   ordinata in senso non decrescente rispetto al valore del campo val, la
   modifica in modo tale che  elementi consecutivi che hanno lo stesso valore
   del campo val sono sostituiti da un elemento  il cui valore del campo val è
   lo stesso e il campo str è la stringa prodotta dalla concatenazione, nell'
   ordine, delle strighe degli elementi sostituiti. La funzione ritorna il
   numero massimo di elementi con lo stesso valore del campo val */
   
#include <stdio.h>
#include <stdlib.h>

typedef struct VStr{
    long val;
    char *str;
    struct VStr *next;
}VStr, *LStr;

int Comp(LStr *L){
    
    int max = 0;    // Valore massimo da restituire al chiamante
    int numvol = 0; // Numero di doppioni trovati per un determinato elemento
    int nuovalunghezza;    // Numero di caratteri della nuova stringa
    int val;        // Contiene il valore del campo val puntato da L
    
    LStr prev;    /* Contiene l'indirizzo del nodo che precede il nodo puntato
                     da L */
    
    prev = NULL;  // Inizialmente prev corrisponde a NULL perchè L punta 1° nodo
    
    while(L!=NULL)    // Scorre la lista fino alla fine
    
        /* Se L non punta al primo nodo e il valore del campo val del nodo
           precedente (messo in val) è uguale al valore del campo val del nodo
           corrente */
        
        if(prev != NULL && val == L->val){
            /* Calcola la nuova lunghezza della nuova stringa */
            nuovalunghezza = strlen(prev->str)+strlen(L->str);
            /* Rialloca dinamicamente per inserire la nuova stringa */
            prev->str = realloc((prev->str, (nuovalunghezza+1)*sizeof(char));
            /* Concatena le 2 strinhe nel campo str puntato da prev */
            strcat(prev->str, L->str);
            
            /* Linka il nodo puntato da prev al nodo puntato da L (L sarà
               eliminato) */
            prev->next = L->next;
            
            /* Libera la memoria del vettore il cui puntatore è nel campo str 
               puntato da L */
            free(L->str);
            /* Elimina il nodo L e libera la memoria */
            free(L);
            
            L = prev->next; // Aggiorna il valore di L al nodo successivo
            
            numvol++;       // Incrementa il numero di doppioni trovati
        }
        
        else{
            if(numvol > max)
                    max = numvol;
            
            numvol = 1;
            val = L->val;
            prev = L;
            L = L->next;
        }
        
        if(numvol > max)
                max = numvol;
        
        return max;
}
Ancora infinitamente grazie

Ciao
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2005, 20:40   #2
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
puoi specificare gli errori che ti dà il compilatore?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 10:47   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Gli errori che mi dà sono questi:

g++.exe -x c++ -c C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c -o C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.o -Wall -fpermissive
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c: In function `int Comp(VStr **)':
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:36: request for member `val' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:38: request for member `str' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:40: warning: left-hand operand of comma expression has no effect
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:40: parse error before `;'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:42: request for member `str' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:42: warning: implicit declaration of function `int strcat(...)'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:46: request for member `next' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:50: request for member `str' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:54: assignment to `VStr **' from `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:64: request for member `val' in `*L', which is of non-aggregate type `VStr *'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:65: assignment to `VStr *' from `VStr **'
C:\DOCUME~1\Andrea\DOCUME~1\C\file\zxzxz.c:66: request for member `next' in `*L', which is of non-aggregate type `VStr *'
Failure


Però mi sembra strano...come logica ci stà?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 10:54   #4
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
non ho tempo di fare prove cmq mi salta subito all'occhio il fatto che nella dichiarazione della funzione hai dichiarato il parametro LStr *L, ti ricordo che LStr è già stato dichiarato come ppuntatore di per se quindi è come se tu al parametro scrivessi VStr **L. prova a cambiare l'intestazione della funzione con Lstr L.
credo che tu abbia anche fatto anche un altro tipo di errore. metti le parentesi graffe anche al blocco a cui si riferisce il while...

e inoltre perchè compili con il g++?? se il programma è scritto in c devi compilare con il gcc.

Ultima modifica di VegetaSSJ5 : 27-05-2005 alle 10:58.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 11:00   #5
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da VegetaSSJ5
non ho tempo di fare prove cmq mi salta subito all'occhio il fatto che nella dichiarazione della funzione hai dichiarato il parametro LStr *L, ti ricordo che LStr è già stato dichiarato come ppuntatore di per se quindi è come se tu al parametro scrivessi VStr **L. prova a cambiare l'intestazione della funzione con Lstr L.
credo che tu abbia anche fatto anche un altro tipo di errore. metti le parentesi graffe anche al blocco a cui si riferisce il while...

e inoltre perchè compili con il g++?? se il programma è scritto in c devi compilare con il gcc.
ops che idiota....ma perchè mi fregano sempre gli errori di distrazione...mi ero dimenticato di averlo dichiarato come puntatore nel typedef...grazie...

cmq distrazione apparte...come logica ci stava?dici che come esame su carta sarebbe passato?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 11:23   #6
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da VegetaSSJ5
credo che tu abbia anche fatto anche un altro tipo di errore. metti le parentesi graffe anche al blocco a cui si riferisce il while...

e inoltre perchè compili con il g++?? se il programma è scritto in c devi compilare con il gcc.
hai letto questo?

cmq credo che come esame su carta sia più che sufficiente anche se LStr *L è un errore...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 13:35   #7
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
si risolto..mannaggia alla mia maledettissima distrazione..cmq perchè nel typedef della struct si dichiara due tipi...uno normale e l'altro puntatore quando poi ne usa uno solo?!?!che senso ha?!?!
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 13:54   #8
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da D4rkAng3l
cmq perchè nel typedef della struct si dichiara due tipi...uno normale e l'altro puntatore quando poi ne usa uno solo?!?!che senso ha?!?!
ma scusa non hai scritto tu quella funzione? se l'hai scritta tu dovresti anche sapere perchè hai dichiarato due tipi nel typedef...
cmq io di solito ne uso uno solo e cioè il tipo "non puntatore" (tanto per farmi capire), questo perchè quando uso i puntatori voglio farlo esplicitamente per evitare errori, e poi perchè a me piace fare proprio così...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 13:59   #9
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da VegetaSSJ5
ma scusa non hai scritto tu quella funzione? se l'hai scritta tu dovresti anche sapere perchè hai dichiarato due tipi nel typedef...
cmq io di solito ne uso uno solo e cioè il tipo "non puntatore" (tanto per farmi capire), questo perchè quando uso i puntatori voglio farlo esplicitamente per evitare errori, e poi perchè a me piace fare proprio così...
no la definizione della struct era data dal proff...è per questo che non mi spiego perchè le metta entrambe...
Anche io preferirei usare il tipo non puntatore...tanto basta aggiungerci un bel * davanti e credo sia più chiaro...però lui fà così...vuole che sia fatto così...che devo fà...mi adeguo alla sua volontà
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2005, 14:13   #10
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da D4rkAng3l
no la definizione della struct era data dal proff...è per questo che non mi spiego perchè le metta entrambe...
Anche io preferirei usare il tipo non puntatore...tanto basta aggiungerci un bel * davanti e credo sia più chiaro...però lui fà così...vuole che sia fatto così...che devo fà...mi adeguo alla sua volontà
se lui vuole che sia fatto così allora fallo così altrimenti gli caschi sul c...o!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
Offerte Amazon sui TV Mini LED Hisense 2...
Il silenzio digitale che fa male: come i...
Il responsabile del programma Cybertruck...
Domanda alle stelle per SSD e RAM: in Gi...
Zuckerberg vuole eliminare tutte le mala...
Otto suicidi, un solo chatbot: si moltip...
'Windows fa schifo' perché ha dim...
Tesla aggiorna il camion Semi, e sposta ...
Come funziona la carta Klarna: tre livel...
I Funko Pop potrebbero sparire per sempr...
Windows 98 in crash davanti a migliaia d...
Samsung Smart TV 85'' Neo QLED Mini LED ...
TikTok rafforza la sicurezza degli acqui...
Samsung Galaxy S25 Ultra 256 GB a ...
Sanzione ridotta per TIM: l'azienda paga...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v