Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-04-2008, 11:46   #1
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
[C] Palindrome

Cosa c'è che non va in questo semplice esercizio per verificare se due stringhe sono palindrome?
Codice HTML:
#include <stdio.h>
#include <stdlib.h>
#include "funzioni_pile.h"

void Palindroma(char *s)
{
    pilaPtr P1=NULL;
    pilaPtr P2=NULL;
    pilaPtr P3=NULL;
    char c;
    int temp=0;

    while(*s!='\0')
    {
        c=*s;
        P1=Push(P1,c);
        P2=Push(P2,c);
        s++;
    }

    while(Empty(P2)==0)
    {
        P3=Push(P3,Top(P2));
        P2=Pop(P2);
    }

    while(Empty(P1)==0)
    {
        if(Top(P1)!=Top(P2)){temp=1;}
    }

    if(temp==0)
    {
        printf("PALINDROMA\n");
    }else
    {
        printf("NO PALINDROMA\n");
    }
}


int main(void)
{
    char *s="ingegni";
    Palindroma(s);
    printf("\n");
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 12:02   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
... omissis ...
while(Empty(P1)==0)
{
if(Top(P1)!=Top(P2)){temp=1;}
}
Devi usare P3 al posto di P2 nel codice di cui sopra.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 12:09   #3
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
OPS, si, errore di distrazione..ma non funziona lo stesso
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 12:10   #4
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
le varie funzioni pop, push, ecc.. le posso lasciare che lavorano con gli int oppure devo mettere char?
non convertono automaticamente il char in int?
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 14:02   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
le varie funzioni pop, push, ecc.. le posso lasciare che lavorano con gli int oppure devo mettere char?
non convertono automaticamente il char in int?
Il codice che hai pubblicato mi sembra corretto, anche se sarebbe stato meglio con un paio di commenti in piu'.
Le varie pop, push, ... non le hai pubblicate. Se hai ancora problemi, prova a stampare quello che mettin in stack e quello che tiri fuori, in modo da vedere da che parte sta il problema in maniera veloce.

Per quanto riguarda la conversione char/int, occorre esaminare il codice per esser sicuri.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 14:53   #6
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
queste sono le funzioni che uso per le pile.

Codice HTML:
#include <stdio.h>
#include <stdlib.h>

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

typedef struct nodo nodo;
typedef struct nodo *pilaPtr;

pilaPtr Crea(int n){

        pilaPtr P=NULL;
        pilaPtr nuovo=NULL;
        pilaPtr testa=NULL;

        int i=0;
        int x=0;

        if(n<=0){return NULL;}
        if(n==1){
                 scanf("%d", &x);
                 nuovo=(pilaPtr)malloc(sizeof(nodo));
                 nuovo->data=x;
                 nuovo->next=NULL;
                 return nuovo;}
        if(n>1){
                scanf("%d", &x);
                nuovo=(pilaPtr)malloc(sizeof(nodo));
                nuovo->data=x;
                testa=nuovo;
                nuovo->next=NULL;

                for(i=0;i<n-1;i++){
                                   scanf("%d", &x);
                                   nuovo=(pilaPtr)malloc(sizeof(nodo));
                                   nuovo->data=x;
                                   nuovo->next=testa;
                                   testa=nuovo;}
                return testa;}}

int Empty(pilaPtr P){
    if(P==NULL){
                return 1;}else{
                       return 0;}}

pilaPtr Push(pilaPtr P, int e){

        pilaPtr nuovo=NULL;

        if(P==NULL){
                    nuovo=(pilaPtr)malloc(sizeof(nodo));
                    nuovo->data=e;
                    nuovo->next=NULL;
                    return nuovo;}else{
                           nuovo=(pilaPtr)malloc(sizeof(nodo));
                           nuovo->data=e;
                           nuovo->next=P;
                           P=nuovo;
                           return P;}}

pilaPtr Pop(pilaPtr P)
{
        pilaPtr temp=NULL;
        int e=0;

        temp=P;
        e=P->data;
        P=P->next;
        free(temp);
        return P;
}

int Top(pilaPtr P){

    return P->data;}

void Stampa(pilaPtr P){

     while(P!=NULL){
                    printf("%d\n", P->data);
                    P=P->next;}}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 16:15   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
La pop(), cosi' come la top() andranno in crash se tenti l'estrazione da una pila vuota.
Ti suggerisco inoltre di controllare il codice di ritorno di ogni malloc() anche se ti sembra inutile.

A parte questo non vedo niente di strano. Ammetto di non aver tanto tempo da dedicarci.
Cmq prima di guardare il codice:
1 - perche' non fai una stampa del contenuto delle pile una volta che le hai caricate? Poi, se non vedi nulla, potresti stampare ogni singolo passo;
2 - perche' non riporti qualche sintomo in piu'? Hai scritto che non funziona, va in crash? Ogni tanto funziona? Riporta valori a caso?
Analizzando i risultati che ottieni potresti evitare di scandire tutto il codice alla ricerca di qualcosa che non sai. E' piu' facile se sai cosa cercare...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 18:21   #8
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
allora, si apre la schermata nera dove in genere esce il risultato e compare solo il cursore, cioè il trattino bianco, che lampeggia...nient'altro...

come dovrei correggere la push e la pop? magarai sono loro...
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 11:06   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
allora, si apre la schermata nera dove in genere esce il risultato e compare solo il cursore, cioè il trattino bianco, che lampeggia...nient'altro...

come dovrei correggere la push e la pop? magarai sono loro...
Sembrerebbe che aspetti dei dati... per caso chiami la funzione Crea() ?
Ho visto il main ma non posso escludere che si siano fatti altri tentativi...

Se chiamassi la Crea() probabilmente aspetteresti di inserire un numero intero, e per questo l'esecuzione sarebbe sospesa.

Cmq, come ti dicevo prima, dovresti fare un minimo di investigazione in piu' e raccogliere piu' informazioni sul malfunzionamento. Altrimenti trovarlo e risolverlo e' davvero molto difficile.

Per esempio: con l'aiuto di un debugger, cerca di capire dove il programma e' fermo (oppure cicla all'infinito).
Oppure, se non vuoi usare un debugger, aggiungi delle scritte, delle printf() in punti strategici in modo da stampare a schermo che sei passato di li', e da stampare alcuni valori importanti.

Per esempio, hai creato la funzione Stampa() per stampare il contenuto di uno stack. USALA! Cosi' puoi vedere se:
- arrivi a riempire lo stack;
- lo riempi correttamente.

Con queste informazioni in mano, il tuo problema diventera' sicuramente piu' facile da risolvere
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 11:57   #10
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
ho inserito delle printf qua e la e il programma si blocca dopo la printf("2");
infatti stampa 12_



Codice HTML:
#include <stdio.h>
#include <stdlib.h>
#include "funzioni_pile.h"

void Palindroma(char *s)
{
    pilaPtr P1=NULL;
    pilaPtr P2=NULL;
    pilaPtr P3=NULL;
    char c;
    int temp=0;
printf("1");
    while(*s!='\0')
    {
        c=*s;
        P1=Push(P1,c);
        P2=Push(P2,c);
        s++;
    }
printf("2");
    while(Empty(P2)==0)
    {
        P3=Push(P3,Top(P2));
        Pop(P2);
    }
printf("3");
    while(Empty(P1)==0)
    {
        if(Top(P1)!=Top(P3)){temp=1;}
    }
printf("4");
    if(temp==0)
    {
        printf("PALINDROMA\n");
    }else
    {
        printf("NO PALINDROMA\n");
    }

printf("5");
}


int main(void)
{
    char *s="ingegni";
    Palindroma(s);
    printf("\n");
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:03   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
ho inserito delle printf qua e la e il programma si blocca dopo la printf("2");
infatti stampa 12_



Codice HTML:
printf("2");
    while(Empty(P2)==0)
    {
        P3=Push(P3,Top(P2));
        Pop(P2);
    }
Si, adesso comincia ad andare meglio.
In effetti, da come se' stata definita la Pop(), devi cambiare
Pop(P2);
in
P2 = Pop(P2);

Prova e vediamo poi gli eventuali errori successivi
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:07   #12
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
niente, non va
Codice HTML:
#include <stdio.h>
#include <stdlib.h>
#include "funzioni_pile.h"

void Palindroma(char *s)
{
    pilaPtr P1=NULL;
    pilaPtr P2=NULL;
    pilaPtr P3=NULL;
    char c;
    int temp=0;
printf("1");
    while(*s!='\0')
    {
        c=*s;
        P1=Push(P1,c);
        P2=Push(P2,c);
        s++;
    }
printf("2");
    while(Empty(P2)==0)
    {
        P3=Push(P3,Top(P2));
        P2=Pop(P2);
    }
printf("3");
    while(Empty(P1)==0)
    {
        if(Top(P1)!=Top(P3)){temp=1;}
    }
printf("4");
    if(temp==0)
    {
        printf("PALINDROMA\n");
    }else
    {
        printf("NO PALINDROMA\n");
    }

printf("5");
}


int main(void)
{
    char *s="ingegni";
    Palindroma(s);
    printf("\n");
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:07   #13
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
anzi si, ora stampa 123 quindi blocca dopo la successiva printf
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:09   #14
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
ORA FUNZIONA, cioè mi stampa NO PALINDROMA, e invece la stringa inserita è palindroma

p.s. avevo dimenticato un P1=Pop(P1);
Codice HTML:
#include <stdio.h>
#include <stdlib.h>
#include "funzioni_pile.h"

void Palindroma(char *s)
{
    pilaPtr P1=NULL;
    pilaPtr P2=NULL;
    pilaPtr P3=NULL;
    char c;
    int temp=0;

    while(*s!='\0')
    {
        c=*s;
        P1=Push(P1,c);
        P2=Push(P2,c);
        s++;
    }

    while(Empty(P2)==0)
    {
        P3=Push(P3,Top(P2));
        P2=Pop(P2);
    }

    while(Empty(P1)==0)
    {
        if(Top(P1)!=Top(P3)){temp=1;}
        P1=Pop(P1);
    }

    if(temp==0)
    {
        printf("PALINDROMA\n");
    }else
    {
        printf("NO PALINDROMA\n");
    }


}


int main(void)
{
    char *s="ingegni";
    Palindroma(s);
    printf("\n");
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:12   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
Codice HTML:
    while(Empty(P1)==0)
    {
        if(Top(P1)!=Top(P3)){temp=1;}
        P1=Pop(P1);
    }
In questo ciclo aggiungi anche
P3 = Pop(P3);
dopo la P1=Pop(P1).

Dai che ci siamo
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2008, 12:21   #16
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
si ora funziona, grazie
xbubbax è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
AMD per il futuro dell'IA in Corea del S...
L'IA agentica incrementa il rischio cybe...
Rapporto Clusit 2026: finanza e infrastr...
Gli stessi sali che solidificano il tofu...
Il conflitto in Medio Oriente minaccia l...
OnlyFans, scomparso il proprietario Leon...
Le migliori offerte Amazon da leggere in...
Recensioni su Trustpilot non affidabili,...
Il CISPE denuncia Broadcom all'antitrust...
Il cyberattacco che negli Usa ha trasfor...
AI Grid Intelligent Orchestration, l'inf...
Roborock Qrevo CURV 2 Flow X: tecnologia...
Quanto viaggia il modem di iPhone Air? I...
300 GB di memoria RAM per le future gene...
One-Tap Share: come funziona la condivis...
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: 19:12.


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