Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
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
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


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
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...
Microsoft ce l'ha fatta! Windows 11 ha u...
Top 7 Amazon di oggi: crolla del 54% il ...
La Terra va verso gli 11,7 miliardi di a...
NVIDIA ribilancia la roadmap? Meno Hoppe...
Rimborso Netflix fino a 500 euro, come p...
DENZA debutta in Europa: Z9GT e D9 porta...
Steam potrebbe presto integrare un siste...
Claude Managed Agents in public beta: ad...
Ring Videocitofono Cablato + Telecamera ...
Windows 10, il supporto ESU viene esteso...
Motorola edge 60 neo a soli 251€: tripla...
Bollette più leggere? Octopus Ene...
Muse Spark è qui: Meta abbandona ...
Microsoft testa su Xbox Insiders la poss...
Climatizzatore 12000 BTU A++ con Wi-Fi a...
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:22.


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