Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-08-2007, 08:39   #1
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
[C] Esercizi vari su liste

Si scriva una funzione ricorsiva che data una lista di caratteri L calcoli il numero di cifre contenute nella lista.

int conta_cifre(L_PTR L)

a->3->f->d->j->4->NULL la funzione restituirà 2

Codice HTML:
#include <stdio.h>
struct nodo{
            int data;
            struct nodo *next}
int main(){
    
           typedef struct nodo NODO;
           typedef struct nodo *NEXT;
           
           
           
           
           
           
           
int conta_cifre(NODO L1){
                         if(L1->data!=NULL){ 
                         if((L1->data>='0')&&(L1->data<=9)){
                                                            return (L1->data-'0') + conto_cifre(L1->NEXT);}
                                                            else return conto_cifre(L1->NEXT);}
                                                            else return 0;}

La funzione dovrebbe essere corretta, ma non so se ho dichiarato bene la struttura e ho usato bene i nomi della lista.
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 08:44   #2
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Ho corretto qualcosa
Codice HTML:
#include <stdio.h>
struct nodo{
            int data;
            struct nodo *next}
int main(){
    
           typedef struct nodo LISTA;
           typedef struct nodo *L_PTR;
           
           
           
           
           
           
           
int conta_cifre(l_PTR L){
                         if(L->data!=NULL){ 
                         if((L->data>='0')&&(L->data<=9)){
                                                            return L->data + conto_cifre(L->next);}
                                                            else return conto_cifre(L1->next);}
                                                            else return 0;}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 08:56   #3
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Qesto eserczio invece cancella tutti i numeri K e i multipli di K dalla lista
Codice HTML:
#include <stdio.h>
struct nodo{
       int data;
       struct nodo *ptr;};
       
int main(){
           typedef struct nodo LISTA;
           typedef struct nodo *L_PTR;
           
           
           
           
           
           
           
int cancellamultipli(L_PTR L, int k){
                                     int temp;
                                     int elem=0;
                                     while(L->data!=NULL){
                                                          resto=(L->data)%k;
                                                          elem=L->data;
                                                          if((elem==k)!!(resto==0){
                                                                                   temp=L;
                                                                                   free(temp);}
                                                                                   L=L->next;}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 09:04   #4
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
HO RISCRITTO IL PRIMO ESERCIZIO
Codice HTML:
#include <stdio.h>
struct nodo{
            int data;
            struct nodo *next}
int main(){
    
           typedef struct nodo LISTA;
           typedef struct nodo *L_PTR;
           
           
           
           
           
           
           
int conta_cifre(l_PTR L){
                         if(L!=NULL){ 
                         if((L>='0')&&(L<='9')){
                                                            return L + conto_cifre(L->next);}
                                                            else return conto_cifre(L->next);}
                                                            else return 0;}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 09:08   #5
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Codice HTML:
#include <stdio.h>
struct nodo{
            int data;
            struct nodo *next}
int main(){
    
           typedef struct nodo LISTA;
           typedef struct nodo *L_PTR;
             
           
           
           
           
           
           
int conta_cifre(l_PTR L){
                         if(L->data!=NULL){ 
                         if((L->data>='0')&&(L->data<=9)){
                                                            return L->data + conto_cifre(L->next);}
                                                            else return conto_cifre(L1->next);}
                                                            else return 0;}
Mmmm, è una vita che non gioco col C, ma credo che riscritta così dovrebbe funzionare meglio:

Codice:
int conta_cifre(l_PTR L){
 if(L!=NULL){ 
  if((L->data>='0')&&(L->data<='9'))
   return 1 + conto_cifre(L->next);
  else
   return conto_cifre(L->next);
 } else
  return 0;
}
Poi potresti dichiare 'data' come char direttamente, anzichè come int. Ah, fai attenzione perchè una lista circolare manderebbe il programma in loop.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 09:15   #6
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Comq il programma deve sommare tutte le cifre che compaiono nella stringa, non incrementare un contatore.

comq come l'avevo scritta io, tranne per quell'errore L!=NULL avrebbe funzionato?
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:31   #7
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Comq il programma deve sommare tutte le cifre che compaiono nella stringa, non incrementare un contatore.
Però anche l'esempio che avevi riportato all'inizio funzionava come avevo immaginato io: trova due cifre ('3' e '4') e restituisce 2.

Quote:
Originariamente inviato da xbubbax Guarda i messaggi
comq come l'avevo scritta io, tranne per quell'errore L!=NULL avrebbe funzionato?
Non funzionerebbe perchè tu scrivi:

Codice:
return L + conto_cifre(L->next);
Ma L->data (non L, quello è il puntatore alla struttura, prima l'avevi scritto giusto), che sia un int od un char, contiene il codice ASCII del carattere che c'è dentro, anche se è una cifra, e non il valore della cifra che quel carattere rappresenta; ti conviene scrivere:

Codice:
return (L->data - '0') + conto_cifre(L->next);
Così sottrai al codice della cifra il codice di '0', e siccome nel codice ASCII le cifre sono ordinate in modo crescente e sono in successione, ottiene proprio il risultato che ti interessa.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:34   #8
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
si hai ragione, deve solo contare quante cifre ci sono
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:49   #9
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Ne approfitto del topic per chiedervi perchè non funziona questo esercizio che verifica se due vettori hanno esattamente gli stessi elementi. Restituiste 0 se sono diversi e 1 se hanno gli stessi elementi ma anche in posizioni diverse
Codice HTML:
#include <stdio.h>
int main(){
           int n;
           int m;
           int a[n];
           int b[m];
           int risultato=0;
           int x;
           int y;
           int i;
           int j;
           printf("Inserisci la lunghezza del vettore a:\n");
           scanf("%d", &n);
           
           for(i=0;i<n;i++){
                            printf("Inserisci un elemento:\n");
                            scanf("%d", &x);
                            
                            a[i]=x;}
           
           printf("Inserisci la lunghezza del vettore b:\n");
           scanf("%d", &m);
           
           for(i=0;i<m;i++){
                            printf("Inserisci un elemento:\n");
                            scanf("%d", &y);
                            
                            b[i]=y;}
                            
           for(i=0;i<n;i++){
                            for(j=0;j<m;j++){
                                             if(a[i]==b[j]){
                                                            risultato=1;
                                                            break;}}
                                                            
                                                            if(risultato=0){break;}
                                                            risultato=0;}
           for(j=0;j<m;j++){
                            for(i=0;i<n;i++){
                                             if(b[j]==a[i]){
                                                            risultato=1;
                                                            break;}}
                                                            
                                                            if(risultato=0){break;}
                                                            risultato=0;}
                            
           printf("%d\n", risultato);
           
           while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();}
                            
                                                                             
                                                            
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:50   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
La "mia" soluzione:
Codice:
int conta_cifre (L_PTR ptr)
{
    if (ptr != NULL)
        return conta_cifre (ptr->next) + (ptr->data >= '0' && ptr->data <= '9');

    return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:57   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Semi-OT

xbubbax: mi nasce qualche dubbio sul tuo modo di indentare il codice...attento che in questo modo superi molto spesso il limite dei caratteri nella linea. Se in un esercizio il limite non si mette mai, nei progetti seri il limite è sempre imposto fra gli 80 e 100 caratteri.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:59   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Codice:
int n;
int m;
int a[n];
int b[m];
Non va affatto bene. La dimensione del vettore è stabilita al momento stesso della dichiarazione. A parte il fatto che la definizione di un array a lunghezza variabile è possibile solo in C++ o nel C99 ma non nel "ANSI C". Comunque quanto valgono n e m?? Non lo sai (non sono inizializzate), quindi la lunghezza degli array è ... boh??

Quindi non serve a nulla fare in seguito: scanf("%d", &n), la allocazione dell'array non è "retroattiva".....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:15   #13
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
andbin sarà sbagliato ma ti assicuro che funziona.

come dovrei scrivere?

comq mi interessa soprattutto sapere cosa sbaglio nel resto del programma, cioè nel programma vero e proprio, questi sono dettagli


per il numero di righe posso sempre andare a capo, mica devo scrivere tutto su un'unica riga, o no
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:19   #14
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da andbin Guarda i messaggi
La "mia" soluzione:
Codice:
int conta_cifre (L_PTR ptr)
{
    if (ptr != NULL)
        return conta_cifre (ptr->next) + (ptr->data >= '0' && ptr->data <= '9');

    return 0;
}
Molto più concisa ed elegante della mia!

Io non avrei mai fatto l'operazione del passo ricorsivo, perchè non avrei mai pensato che, in fondo, un valore "booleano" per il C è pur sempre un byte posto ad 1, cioè appunto un int che vale 1 o 0 a seconda del valore del test, e che quindi puoi sommarlo al risultato della ricorsione tranquillamente: è troppo tempo che lavoro in Java e sono diventato "strongly-typed"...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:25   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
questi sono dettagli
Hai voglia a chiamarlo "dettaglio" non sapere quanti elementi sono stati allocati per gli array......

EDIT: avevo risposto qui in passato ad una questione del genere.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 13-08-2007 alle 11:30.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:26   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
per il numero di righe posso sempre andare a capo, mica devo scrivere tutto su un'unica riga, o no
Certo che no...ma il problema è che solitamente si ritorna a scrivere allineati con l'inizio dell'indentazione (anzi molti ci mettono anche un tab) e quindi se sei già in fondo con l'ultima indentazione ti rimarranno pochissimi caratteri.
Inoltre con il tuo metodo con pochissimi blocchi annidati raggiungi il termine della riga.
Se ad esempio avessi una funzione:
unsigned double funzioneCheFaQualcosa(unsigned int primo, unsigned int secondo, unsigned int terzo)

Quanto spazio ti resta ? Molto poco E una funzione con un dichiarazione di queste dimensioni non è per niente rara !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:39   #17
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da andbin Guarda i messaggi
La "mia" soluzione:
Codice:
int conta_cifre (L_PTR ptr)
{
    if (ptr != NULL)
        return conta_cifre (ptr->next) + (ptr->data >= '0' && ptr->data <= '9');

    return 0;
}
Bene! C'e' pero' da dire che "ufficialmente":
- il valore boolean FALSE e' associato all'intero di valore 0;
- il valore boolean TRUE e' associato a qualsiasi numero diverso da zero;

Pertanto un compilatore che decida di ritornare 3, 5 o -1 come esito di una espressione booleana, sarebbe perfettamente accettabile, e magari e' anche probabile che succeda quando si attivano le opzioni di ottimizzazione...

In tal caso sarebbe meglio usare un operatore ternario e scongiurare il pericolo.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:53   #18
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Qualcuno mi aiuta a capire l'altro esercizio?

Ultima modifica di xbubbax : 13-08-2007 alle 14:50.
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 13:33   #19
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Qualcuno mi aiuta a capire l'altro esercizio?

tenchiù
Edit
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN

Ultima modifica di Mixmar : 13-08-2007 alle 13:40.
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 15:25   #20
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Bene! C'e' pero' da dire che "ufficialmente":
- il valore boolean FALSE e' associato all'intero di valore 0;
- il valore boolean TRUE e' associato a qualsiasi numero diverso da zero;

Pertanto un compilatore che decida di ritornare 3, 5 o -1 come esito di una espressione booleana, sarebbe perfettamente accettabile, e magari e' anche probabile che succeda quando si attivano le opzioni di ottimizzazione...
A dire il vero il libro "Il linguaggio C, 2° ed." di Kernighan/Ritchie dice, riporto testuali parole:
Gli operatori < (minore), > (maggiore), <= (minore di o uguale a) e >= (maggiore di o uguale a) generano tutti 0 se la relazione specificata è falsa e 1 se è vera. Il tipo del risultato è int.
Nella espressione che ho scritto io c'è solo di mezzo un AND logico, il che non cambia nulla sui valori forniti dagli operatori relazionali.

Quote:
Originariamente inviato da sottovento Guarda i messaggi
In tal caso sarebbe meglio usare un operatore ternario e scongiurare il pericolo.
Certo, sarebbe altrettanto corretto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
Ex CEO di TSMC passa a Intel: aperta un'...
Gigabyte X870E Aorus Elite X3D, una moth...
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: 22:02.


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