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 05-08-2009, 12:18   #1
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
[C] - Esercizio sulle stringhe

Sul libro "Il linguaggio C - Principi di programmazione e manuale di riferimento" nel capitolo dei vettori mi trovo questo esercizio:

"Si scriva un programma che stampi l'istogramma relativo ai diversi caratteri contenuti nel testo di ingresso"

C'è qualcuno che sà darmi qualche input??
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 15:06   #2
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Nessuno sa darmi un input??
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 15:42   #3
Rsk
Senior Member
 
L'Avatar di Rsk
 
Iscritto dal: Dec 2006
Messaggi: 314
scanf("%s",&88MIKI88);

Non hai capito il testo?

un istogramma puoi farlo stampando per esempio degli asterischi in questo modo

**********
******
*************
****

dove il numero degli asterischi indica la frequenza di ciascuna lettera nella stringa
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB
Rsk è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 16:23   #4
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Il testo l'ho capito xkè prima ne avevo svolto uno che chiedeva di stampare l'istogramma relativo alla lunghezza delle parole.

Il problema invece nasce quando devi crearlo su ogni singolo carattere che il prog. legge...

Nell'altro es. avevo usato getchar.

Di seguito posto l'altro esercizio:

Codice:
include <stdio.h>
#define MAX 10
main ()
{
char c;
int nc,i, Vet[MAX];

for (i=0;i<=MAX;i++)
Vet[i]=0;

nc=0;
while ((c=getchar())!=EOF) {
    printf("%c",c);

    if(c=='\n'){
        Vet[nc-1]++;
        break;
    }
    if (c== ' ') {
        Vet[nc-1];
        nc=0;
    }

    else {
        nc++;

    }
}

for (i=0;i<=MAX;i++)
printf("Lunghezza\t%d\occorrenze:\t%d\n", i+1, Vet[i]);
}
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------

Ultima modifica di 88MIKI88 : 05-08-2009 alle 18:31.
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 01:36   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Mi sembra che ci sia qualche errore in quest'ultimo codice che hai postato. Comunque il principio da adottare per risolvere quest'altro esercizio è lo stesso, crei un array di dimensione 256 che sono i possibili valori di un char poi per ogni carattere letto incrementi il contatore corrispondente. Alla fine stampi il carattere e gli asterischi in base al contatore di quel carattere (magari considerando solo quelli con contatore >0)
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 09:15   #6
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Sorry c'hai ragione in effetti il codice corretto è questo:

Codice:
#include "stdio.h"
#define  LEN_MAX 10


int main(int argc, char* argv[])
{
	char c;
	int i,contatore,conteggi[LEN_MAX];

	for(i=0;i<LEN_MAX;i++){
		conteggi[i]=0;
	}

	contatore=0;
	while(c=getchar()){
		printf("%c",c);
		if(c=='\n'){
			conteggi[contatore-1]++;
            break;
		}
		if(c==' '){
			conteggi[contatore-1]++;
			contatore = 0;
		}
		else{
			contatore++;
		}
	}
	for(i=0;i<LEN_MAX;i++){
		printf("Lunghezza:\t%d\toccorrenze:\t%d\n",i+1,conteggi[i]);
	}
	return 0;
}
Ma quindi devo usare più di un contatore o sbaglio?
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 09:16   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
crei un array di dimensione 256 che sono i possibili valori di un char poi per ogni carattere letto incrementi il contatore corrispondente
256 caratteri possibili == 256 contatori, uno per ogni carattere possibile
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 09:20   #8
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Si ma allora con 256 contatori è un esercizio lunghissimo o sbaglio?=
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 09:53   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
L'insieme dei contatori potrebbe essere un array di tipo int di 256 elementi.
I char sono 256, ogni singolo char puoi anche vederelo come un intero, quindi da un singolo char letto potresti prendere il suo valore intero da usare come indice per incrementare il corrispondente elemento dell'array dei contatori.
[è proprio questa corrispondenza che ti permette di evitare di codificare a mano 256 confronti, se era questo il tuo dubbio]

In pratica, quello che devi fare, è ciclare sul vettore di caratteri, recuperare un char alla volta, usare il valore di quel char come indice per accedere all'elemento specifico dell'array dei contatori e incrementarne il valore di 1.

Alla fine del 'parsing' del vettore, cicli sull'array dei contatori e recuperi un elemento alla volta: stampi il carattere relativo che è il valore dell'indice dell'elemento corrente + 1 castato a tipo char e stampi (altro ciclo) un numero di caratteri '*' pari al valore dell'elemento dell'array dei contatori corrente, infine stampi il carattere di newline, per andare a capo riga.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 06-08-2009 alle 10:44.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 10:46   #10
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Potresti farmi un esempio pratico?
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 11:31   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ad esempio, supponiamo di avere un array di char come vettore dei caratteri (mi esprimo in pseudocodice):
- char* caratteri

Supponiamo anche di creare un array di 256 interi, che usiamo come contatore per i caratteri trovati. Il valore di ogni elemento intero nell'array rappresenta il valore del contatore associato con il carattere che ha lo stesso valore dell'indice di quell'elemento.
- int counters[256]

Ora esaminiamo un elmento del vettore di caratteri che dobbiamo contare.
Se io accedo a un elemento, supponiamo il primo, cosa ottengo? Ottengo un char.
- char c = caratteri[0]

Ora voglio incrementare il valore del contatore corrispondente al carattere 'c' che ho appena estratto, come fare?
Semplice: il valore del carattere (il valore di 'c') è, alla fine, un valore di tipo intero! Quindi uso il valore di 'c' (che essendo un char avrà un valore che va da 0 a 255, vedi immagine a fine post) come valore dell'indice dell'elemento da incrementare nell'array 'counters'.
- counters[(int)c] += 1



E' più chiaro adesso?

P.S.: non ti faccio un esempio pratico nel senso con codice vero e proprio per due ragioni:
1) non ricordo bene il C (non lo uso da 3 anni) e per evitare strafalcioni (leggi: figure da chiodo ) dovrei perdere un po' di tempo per controllare di scrivere tutto senza cappellate;
2) e cosa più importante, è un esercizio e nel forum è vietato postare soluzioni complete agli esercizi; ma come vedi spendo volentieri il tempo cercando di fornire spiegazioni più chiare affinchè tu arrivi da solo a capire (e a quel punto scrivere il codice diventa semplice e divertente)
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 06-08-2009 alle 17:14.
banryu79 è 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
Gemini, Google investe 30 milioni per la...
Roborock Qrevo Edge S5A: 17.000 Pa, acqu...
Resa pubblica la foto della ''Terra che ...
Il robot che ha piegato 200 scatole di f...
SteelSeries Aerox 3 Wireless Gen 2: nuov...
"Quasi sociopatico": Sam Altma...
Star Wars Eclipse in difficoltà: ...
Gestione del team e romance organiche: l...
Intel lancia Core Ultra X9 378H: hardwar...
Tomodachi Life non supporterà Handheld M...
Identificati i boss di REvil e GandCrab:...
Google Chrome 148 introduce il caricamen...
Tomb Raider: Legacy of Atlantis, l'uscit...
Casa Bianca: proposto un budget ridotto ...
Telecamere Arlo in offerta su Amazon: Es...
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:52.


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