Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-10-2011, 11:36   #1
Rootnight
Junior Member
 
Iscritto dal: Oct 2011
Messaggi: 9
creare un programma per la notazione polacca inversa

Salve , l'altro giorno mentre studiavo dal libro "Corso di programmazione completa in C" di Deitel & Deitel , sono giunto agli esercizi del capitolo 12 , e un esercizio che mi chiede di valutare un espressione in notazione polacca inversa (l'esercizio prima chiede di fare un programma che converta un'espressione in notazione infissa in notazione polacca inversa) , ma il problema è che io non riesco a fare il seguente programma , comunque se serve ecco il codice dell'esercizio precedente:

Codice:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAX_STRINGA 30
#define NON_PRESENTE -1
int matr_regole[6][7]={{4,1,1,1,1,1,5},
			{2,2,2,1,1,1,2},
			{2,2,2,1,1,1,2},
			{2,2,2,2,2,1,2},
			{2,2,2,2,2,1,2},
			{5,1,1,1,1,1,3}};
char vett_car[7+1]="%+-*/()";

typedef struct dato_s
{
	char carat;
	struct dato_s *prossimo;
}dato;
typedef enum {FALSE,TRUE} boolean;

dato *stack_pointer,*punt_insert,*punt_extract;
char str[MAX_STRINGA];
int indice,colonna,riga,regola;
boolean finito,corretto;
char carat_stack;

int leggi_str(char stringa[]);
void push(dato **p_stack_pointer, char carattere);
void pop(dato **p_stack_pointer, char *carattere);
void queue(dato **p_insert, dato **p_extract, char carattere);
int cerca_posizione(char carattere);
void guarda_cima_stack(dato *p_stack_pointer, char *carattere);
void stampa(dato *punt);
void inizializza (dato **p_stack_pointer, dato **p_punt_insert, dato **p_punt_extract);

main()
{
	
	while(leggi_str(str)!=EOF)
	{
		inizializza (&stack_pointer,&punt_insert,&punt_extract);
		push(&stack_pointer,str[0]);
		indice=1;
		finito=FALSE;
		while(!finito)
		{
			if((colonna=cerca_posizione(str[indice]))==NON_PRESENTE)
			{
				queue(&punt_insert,&punt_extract,str[indice]);
				indice++;
			}
			else
			{
				guarda_cima_stack(stack_pointer,&carat_stack);
				riga=cerca_posizione(carat_stack);
				regola=matr_regole[riga][colonna];
				switch(regola)
				{
					case 1:
					{
						push(&stack_pointer,str[indice]);
						indice++;
					}
					break;
					case 2:
					{
						pop(&stack_pointer,&carat_stack);
						queue(&punt_insert,&punt_extract,carat_stack);
					}
					break;
					case 3:
					{
						pop(&stack_pointer,&carat_stack);
						indice++;
					}
					break;
					case 4:
					{
						corretto=TRUE;
						finito=TRUE;
					}
					break;
					case 5:
					{
						corretto=FALSE;
						finito=TRUE;
					}
				}
			}
		}
		if(corretto)
			stampa(punt_extract);
		else
			printf("Espressione non correttamente bilanciata\n");
	}
}


void inizializza (dato **p_stack_pointer, dato **p_punt_insert, dato **p_punt_extract)
{
dato *p_aux, *p_prec;

p_aux = *p_stack_pointer;
while (p_aux!=NULL)
	{
	p_prec = p_aux;
	p_aux = (*p_prec).prossimo;
	free (p_prec);
	}
*p_stack_pointer=NULL;
*p_punt_insert=*p_punt_extract=NULL;
}




int leggi_str(char stringa[])
{
	int indice;
	char carat;
	stringa[0]='%';
	indice=1;
 * * * *printf("Introduci l'espressione: ");
	while(((carat=getchar())!='\n')&&(carat!=EOF))
	{
		stringa[indice]=carat;
		indice++;
	}
	stringa[indice]='%';
	stringa[indice+1]='\0';
	return(carat);
}

void push(dato **p_stack_pointer, char carattere)
{
	dato *p_corr;
	p_corr=(dato *)malloc(sizeof(dato));
	(*p_corr).carat=carattere;
	(*p_corr).prossimo=*p_stack_pointer;
	*p_stack_pointer=p_corr;
}

void pop(dato **p_stack_pointer, char *carattere)
{
	*carattere=(**p_stack_pointer).carat;
	*p_stack_pointer=(**p_stack_pointer).prossimo;
}

void queue(dato **p_insert, dato **p_extract, char carattere)
{
	dato *p_corr;
	p_corr=(dato *)malloc(sizeof(dato));
	(*p_corr).carat=carattere;
	(*p_corr).prossimo=NULL;
	if(*p_insert==NULL)
	{
		*p_insert=p_corr;
		*p_extract=p_corr;
	}
	else
	{
		(**p_insert).prossimo=p_corr;
		*p_insert=p_corr;
	}
}

int cerca_posizione(char carattere)
{
	int indice=0;
	while((vett_car[indice]!=carattere)&&(indice<strlen(vett_car)))
		indice++;
	if (indice==strlen(vett_car))
		indice = NON_PRESENTE;
	return(indice);
}

void guarda_cima_stack(dato *p_stack_pointer, char *carattere)
{
	*carattere=(*p_stack_pointer).carat;
}

void stampa(dato *punt)
{
	dato *p_temp;
	p_temp=punt;
	while(p_temp!=NULL)
	{
		putchar((*p_temp).carat);
		p_temp=(*p_temp).prossimo;
	}
	putchar('\n');
}
Grazie mille a tutti.
Rootnight è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
WhatsApp si aggiorna con una nuova app c...
Windows 11 23H2, ricerca nel menu Start ...
Google Chrome introduce il layout vertic...
Artemis II: per la prima volta degli ast...
Battery swap e flotte smart: così nasce ...
Apple affronta un dilemma con il MacBook...
ECOVACS X11 OMNICYCLONE: 19.500 Pa, moci...
ll nuovo HONOR 600 Lite 5G arriva in Ita...
Kindle, addio allo store sui vecchi e-re...
DJI Flip Combo Fly More a 599€ invece di...
Addio cavi e adattatori multipli: Techly...
MOVA M50 Ultra: scopa elettrica con brac...
Amazon taglia i prezzi su GPU, CPU, alim...
Snapdragon 8 Elite Gen 6 Pro: migliorame...
Mythos di Anthropic trasforma il 72% del...
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: 11:01.


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