PDA

Visualizza la versione completa : [C] Struct: filtrare i dati in base a un campo


the_game
04-02-2011, 00:40
ciao a tutti,sto facendo questo progetto:



#include <stdio.h>
#include <stdlib.h>

struct locali {
int codice;
char nome[20];
float prezzo;
int posizione;
};
typedef struct locali Locali;
void main()
{
Locali negozio[8]={{1111,"Pizzeria",15.50,1},
{1112,"Ristorante",19.90,2},
{1113,"Caffetteria",15.00,3},
{1114,"Ristorante cinese",29.90,4},
{1115,"Ristorante messicano",28.00,5},
{1116,"Caffetteria",17.50,6},
{1117,"Pub americano",13.90,7}};


i primi numero sono i codici,il penultimo è il prezzo e l ultimo è la posizione.

ora devo fare in modo che data una tipologia visualizzare tutti i negozi di quel tipo e la loro posizione.cioè se un utente inserisce ad esempio 'ristorante' il programma deve stampare solo i ristoranti...in che modo lo posso fare?

Celebron
04-02-2011, 01:44
usa un confronto tra stringhe per ogni cella del vettore, stampando solo quelle che hanno corrispondenza

LeleFT
04-02-2011, 09:09
Prendi anche visione del Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Il linguaggio va obbligatoriamente indicato nel titolo.
Il titolo deve dare un'informazione precisa del contenuto della discussione.
Il codice va postato indentato usando gli appositi tag CODE.

Correggo la discussione.


Ciao. :ciauz:

GliderKite
04-02-2011, 10:59
Originariamente inviato da Celebron
usa un confronto tra stringhe per ogni cella del vettore, stampando solo quelle che hanno corrispondenza

Troppo lento.

La struttura dati che a me pare più adatta se desideri mantenere la struttura locali inalterata e una tabella di hash a concatenazioni separate con funzione di hash universale per stringa a coefficienti pseudocasuali, in questo modo dovresti poter garantire un accesso ai dati con costo O(1).

lolide
04-02-2011, 11:08
Originariamente inviato da GliderKite
Troppo lento.

La struttura dati che a me pare più adatta se desideri mantenere la struttura locali inalterata e una tabella di hash a concatenazioni separate con funzione di hash universale per stringa a coefficienti pseudocasuali, in questo modo dovresti poter garantire un accesso ai dati con costo O(1).


E il costo di una tabella hash in memoria ? :D

No vabbè tralasciando questi metodi, perchè non mi sembra che sia una struttura di tre miliardi di record da controllare su un 486 lol, dovrebbe andare bene anche un semplice strcmp, prima però usando tolower() per portare tutto in minuscolo.

GliderKite
04-02-2011, 11:31
Originariamente inviato da lolide
E il costo di una tabella hash in memoria ? :D

No vabbè tralasciando questi metodi, perchè non mi sembra che sia una struttura di tre miliardi di record da controllare su un 486 lol, dovrebbe andare bene anche un semplice strcmp, prima però usando tolower() per portare tutto in minuscolo.

Certo che dovrebbe andare bene, dipende sempre da cosa di deve fare. Io suggerivo semplicemente la soluzione migliore :ciauz:

Celebron
04-02-2011, 13:32
Originariamente inviato da GliderKite
Troppo lento.

La struttura dati che a me pare più adatta se desideri mantenere la struttura locali inalterata e una tabella di hash a concatenazioni separate con funzione di hash universale per stringa a coefficienti pseudocasuali, in questo modo dovresti poter garantire un accesso ai dati con costo O(1).

certo che è lento però proponevo una struttura in relazione alla complessità di codice che ha postato (non mi sembra, ad occhio, che stia svolgendo un progetto che punta all'ottimizzazione)
XD visto ciò che ha scritto non credo proprio che sappia fare quello che tu gli suggerisci

a dirla tutta gli basterebbe sistemare in un altro modo la base dati per migliorare già enormemente le cose, ma anche per questo, non mi è sembrato il caso
Credo stia semplicemente svolgendo un progetto universitario di base

the_game
04-02-2011, 14:07
si infatti sto vacendo un progetto per l università! penso che usero la strcmp...ma potendo si potrebbe usare anche una ricerca sequenziale o binaria?

the_game
09-02-2011, 15:01
scusate la lunga assenza...comunque sono riuscito a fare tutto il programma.ora vi chiedo una cosa,ho iniziato il programma cosi:


printf("Premere A per inserire un nuovo negozio in un locale \n"); printf("premere B per cercare un negozio in base alla tipologia \n"); printf("Premere C per cercare un negozio in base al prezzo di un pasto completo \n"); printf("Premere D per uscire\n");

Quando uno preme A,il programma va nella fuction inserire negozio.ora vorrei che quando finisce l'operazione inserire negozio il programma ritorni alla schermata iniziale ovvero quella che ho postato..mi hanno detto di mettere system("cls") ma m pulisce solo lo schermo non mi visualizza niente...ora o sbaglio la posizione di system("cls")....help!

Laikius91
09-02-2011, 15:06
Originariamente inviato da the_game
scusate la lunga assenza...comunque sono riuscito a fare tutto il programma.ora vi chiedo una cosa,ho iniziato il programma cosi:


printf("Premere A per inserire un nuovo negozio in un locale \n"); printf("premere B per cercare un negozio in base alla tipologia \n"); printf("Premere C per cercare un negozio in base al prezzo di un pasto completo \n"); printf("Premere D per uscire\n");

Quando uno preme A,il programma va nella fuction inserire negozio.ora vorrei che quando finisce l'operazione inserire negozio il programma ritorni alla schermata iniziale ovvero quella che ho postato..mi hanno detto di mettere system("cls") ma m pulisce solo lo schermo non mi visualizza niente...ora o sbaglio la posizione di system("cls")....help!

Bè non ne sono sicuro, ma la system ("cls"), 'pulisce' la schermata in toto... dopo dovresti ristampare a video le istruzioni ecc ecc..
Potresti studiare un ciclo, al termine del quale fai sempre una system ("cls"), seguita dalla stampa delle opzioni e dalla lettura delle scelta dell'utente... Il ciclo ovviamente andrà avanti ad eseguire le azioni richieste dall'utente fino a quando questo inserirà 'D'!

Loading