Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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: 2794
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 REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Denza Z9S: la berlina elettrica con il r...
Valve abilita i driver e il supporto all...
Terafab, il progetto di Musk finisce in ...
Il meglio di Amazon in 42 articoli: sono...
ECOVACS WINBOT W2 PRO OMNI a 349€: ecco ...
Samsung Gallery Cloud Sync introduce il ...
Dyson V8 Cyclone a 249€: scopa elettrica...
Rifiuti elettronici, l'altra faccia dell...
Meta prepara Luna, i nuovi occhiali smar...
SSD NVMe Gen4 2TB in offerta: Acer Preda...
Perché i backup non bastano pi&ug...
Maserati, si concretizza la pista cinese...
Corea del Sud preoccupata: le cinesi YMT...
Se ne vendono 3000 al mese su Amazon: Sm...
Sedie gaming ergonomiche su Amazon: SONG...
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:00.


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