Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Abbiamo provato la Gigabyte Radeon RX 9070 GRE Gaming OC, nuova proposta RDNA 4 che si inserisce tra GeForce RTX 5060 Ti e RTX 5070. Prestazioni solide in rasterizzazione e ray tracing, frequenze elevate grazie all'overclock di fabbrica e raffreddamento efficace: ecco come si comporta nei nostri test.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-10-2007, 21:34   #1
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
[C]Approssimazione Decimali

// stampa di un decimale con il formato (#.###.###,####)
//
// es:143567,8 --> Risultato: 143.567,80 (approssimazione a due decimali //dopo la virgola, e relativi . ogni 3 cifre prima della virgola...


Vi posto il sorgente...Devo utilizzare le stringhe , quindi dopo aver preso in input il numero decimale, con fprintf diventa una stringa sul quale lavorare


Quote:
#include <stdio.h>
#include <conio.h>


void inputstampa(void)
{
double c;
char str1[20];
clrscr();

/* Input Carattere con decimale*/
printf("Inserisci un valore decimale: ");
scanf("%lg",&c);
/* Input del carattere sotto forma di stringa*/
sprintf(str1,"%f",c);


*/E ora come faccio ad approssimare a due cifre decimali????
E a inserire i punti ogni 3 cifre?? Aiutatemiii/*


}
printf("%s",str1); // stampiamo per prova la stringa


getch();
}

dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 23:19   #2
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
// stampa di un decimale con il formato (#.###.###,####)
//
// es:143567,8 --> Risultato: 143.567,80 (approssimazione a due decimali //dopo la virgola, e relativi . ogni 3 cifre prima della virgola...


Vi posto il sorgente...Devo utilizzare le stringhe , quindi dopo aver preso in input il numero decimale, con fprintf diventa una stringa sul quale lavorare
Non mi ricordo il comando... però è un'opzione di stampa (%qualcosa) di printf (o sprintf o simili), prova a dare un'occhiata alle pagine dello standard.
È dai tempi del triciclo che non uso più C...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2007, 15:10   #3
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
sprintf(str1,"%10.2f",c); // Stampiamo solo due decimali dopo la virgola

Sn riuscito a risolvere parzialmente il mio problema..ora mi rimane solo da mettere dei . (ke fungono quasi da separatori) ogni 3 cifre--qualche idea?
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2007, 15:26   #4
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
sprintf(str1,"%10.2f",c); // Stampiamo solo due decimali dopo la virgola

Sn riuscito a risolvere parzialmente il mio problema..ora mi rimane solo da mettere dei . (ke fungono quasi da separatori) ogni 3 cifre--qualche idea?
Esatto era proprio quello che intendevo per i decimali.
Per troncare le cifre che ricordi io non c'è un qualcosa apposito nelle specifiche, quindi non rimane che convertire la cifra in una stringa e lavorarci.
L'ideale sarebbe creare una funzione stampacifradecimali(int cifra) che ti stampa le cifre come vuoi te.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2007, 20:54   #5
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Un idea su come fare queste righe di codice? Anche se nn sono dentro una funzione..
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2007, 00:13   #6
ramhd
Bannato
 
Iscritto dal: Sep 2007
Messaggi: 40
Prova a fare degli shift a destra a gruppi di 3. Per ogni gruppo appena dopo la virgola, prendi il valore e lo converti in stringa e poi ci metti avanti un punto. Questo fino a quando il valore non è <= 0
ramhd è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2007, 00:17   #7
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Un idea su come fare queste righe di codice? Anche se nn sono dentro una funzione..
Dunque, ti do una pseudo sintassi:

char* dividi(float numero) la funzione ritorna un puntatore ad un vettore di caratteri (una stringa).
{

cerchi nello standard la funzione che converte un intero in un array di caratteri (prova a cercare itoa o simili)
quindi fai:
temp=(int)numero;
vettore=itoa(numero);
e hai un vettore che contiene il numero in formato caratteri.
poi:

for(int i=0; i<strlen(vettore); i+=3) prendi i caratteri di 3 in 3
{
if(i+3>strlen(vettore)) j=strlen(vettore); se i+3 eccede la lunghezza del vettore di caratteri allora fermati alla fine del vettore nel tagliare
else j=i+3; altrimenti prendi i 3 caratteri successivi

strcpy(ret, vettore, i, j); copia i caratteri dalla posizione i alla posizione j del vettore in ret concatenandoli al contenuto di ret
add('.', ret); aggiungi il punto dopo i 3 caratteri
}
}

Perdonami ma sono parecchio arrugginito nel C, comunque il primo modo di procedere che mi è venuto in mente è questo, non sarebbe male fare ricorsivamente la cosa, e inoltre io ottimizzerei l'if dentro il for.
I numeri decimali invece li gestisci a parte, magari prima del for inserendo la , nella stringa.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2007, 12:26   #8
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Quote:
Perdonami ma sono parecchio arrugginito nel C

Eh si..la funzione add nn esiste..inolte il compilatore mi segnala che ho inserito troppi parametri in strcpy..e poi devo lavare obbligatoriamente sulle stringhe e nn sui vettori..qualche altre idea?
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2007, 13:06   #9
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Eh si..la funzione add nn esiste..inolte il compilatore mi segnala che ho inserito troppi parametri in strcpy..e poi devo lavare obbligatoriamente sulle stringhe e nn sui vettori..qualche altre idea?
Le funzioni che ti ho messo sono solo intuitive, la add sarebbe una funzione di concatenamento tra stringe... e in C non c'è il concetto di Stringa, ma ti vettore di caratteri (con terminatore), per questo te l'ho chiamato così. Devi fare un bel lavoretto di spulciamento dello standard mi sa. Comunque l'idea di base della funzione è come te l'ho spiegata io e l'altro utente in breve (è la stessa cosa).
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 08-10-2007, 19:10   #10
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Ragazzi ancora un aiuto...devo sostituire il punto con la virgola (all'interno della stringa)


ho provato a fare questo ma stampa prima la virgola e poi la stringa...come fare?? help

/* Sostituisce il punto con la virgola( per il numero decimale) */

for ( i=0; str1 != 0; i++)
{
if( str1[i] =='.'){
printf(",");
printf("%s",str1);

}
}
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 08-10-2007, 22:06   #11
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Se ho ben capito quello che intendi... prova a fare come ti ho indicato di seguito...

for ( i=0; str1 != 0; i++)
{
if( str1[i] =='.') { printf(","); } //<--PARENTESI GRAFFE INUTILI
printf("%s",str1[i]);
}

Una domanda... come mai la condizione di uscita del ciclo è str1==0? Voglio capire il motivo per farti evitare errori gravi, di solito per sicurezza si usa una diseguaglianza...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 09-10-2007, 11:43   #12
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
for ( i=0; str1[i] != 0; i++)
{
if( str1[i] =='.'){
str1[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
printf("%s",str1);
}

}
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 09-10-2007, 17:38   #13
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
for ( i=0; str1[i] != 0; i++)
{
if( str1[i] =='.'){
str1[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
printf("%s",str1);
}

}
Si esatto... così crei la stringa come vuoi e poi la visualizzi, altrimenti puoi visualizzarla mentre la crei, ma non è un buon metodo.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Recensione Vivo X300 Ultra: fotocamera eccezionale, ma prezzo proibitivo Recensione Vivo X300 Ultra: fotocamera ecceziona...
Cooler Master al Computex 2026: case sil...
G.Skill mostra AMD EXPO ULL al Computex:...
Hilti e i data center, l'ingegneria dell...
Narwal anticipa il Prime Day: sconti fin...
Sharkoon mantiene il rapporto qualit&agr...
Xference e Aruba insieme per l'IA privat...
Google Wallet, in arrivo i documenti d'i...
Recensione OPPO Enco Clip2: tanta tecnol...
Altro passo dei cinesi in Europa: Chery ...
AMD FSR 4.1: l'architettura RDNA 3.5 pot...
L'Economist dice di non dare la colpa al...
Meta frena sul tracciamento dei dipenden...
Falla zero-click su Android, anche Linux...
AMD ha nascosto il vero segreto di EXPO ...
TRYX porta la personalizzazione a un nuo...
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: 17:33.


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