Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
OnePlus risponde alle esigenze di chi cerca un dispositivo indossabile dalle dimensioni contenute con OnePlus Watch 3 43mm. La versione ridotta del flagship mantiene gran parte delle caratteristiche del modello maggiore, offrendo un'esperienza completa in un formato compatto. Il suo limite più grande è abbastanza ovvio: l'autonomia non è il punto di forza di questo modello, ma si raggiungono comodamente le due giornate piene con un uso normale.
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C rappresenta l'ultima incarnazione della categoria dei tablet E Ink a colori di Onyx, e combina le prestazioni di un dispositivo Android con l'ottima tecnologia Kaleido 3 per il display. Con schermo da 10,3 pollici, un processore Qualcomm Snapdragon 750G e 6 GB di RAM, promette un'esperienza completa per lettura, scrittura e produttività. Il prezzo lo posiziona nel segmento premium, ma questo dispositivo è un vero spettacolo!
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-10-2007, 19:16   #1
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
(C)Aiuto con problema grave

Ho un problema ke nn so risolvere..dovei stampare la stringa proprio come il formato della stringa fmt(ed essa puo' variare quindi inutile giocare su i+3 ecc)

char fmt[] = "#.###.###,#";
char num[] = ""; // In num verrà inserito un numero decimale da input

/* qui sostituisco il . con la ,*/
for ( i=0; num[i] != 0; i++)
{
if( num[i] =='.'){
num[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
printf("%s",num);
}
}


Ora avremo per es...1234.5 sotto forma di 1234,5...e qui posto il codice dove ho l'errore per l'operazione successiva..


while (i>=0 && j>=0) {
if (fmt[i] == '#') {
st[k]=num[j];
k--;
j--;
}
if (fmt[i] == '.') {
st[k] = '.';
i--;
} // quest ultimo if è sbagliato..nn fa quel ke deve fare e cmq nn credo ke basti per fare cio' ke mi serve
if (fmt[i] == ',') {
st[k] = ',';
i--;
}
}
printf("\n ris= %s",st);
}

Il mio obbiettivo era il seguente...dopo la conversione della ",", il ciclo scorre fmt e quando trova # stampa il numero di num[](ke nel frattempo è stato pres o in input e quindi definito),quando trova la virgola appunto stampèrà la virgola e quando trova il punto idem... Mi date una mano a fare cio'?Aiutooo sto impazzendo..kiedo a voi programmatori di hardware upgrade

risultato... input: 1234.5 [ con formato(#.###.###,#)] == 1.234,5
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 13:45   #2
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
up...
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 14:35   #3
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
confesso di non aver capito bene quello che ti serve
credevo che fmt fosse il comando di linux per la formattazione poi ho scoperto che è un nome di variabile e tutto è diventato oscuro
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 14:47   #4
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
stampare un numero con un formato es: uno scrive 1234 lo stampa 1.234( se il formato è #.###.###,##
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 14:54   #5
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Credo che faresti meglio a partire dalla prima cifra immediatamente a sinistra della virgola, e quindi a procedere da quella verso sinistra (cioè nel senso dei valori posizionali crescenti), anzichè partire da destra, come fai tu.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 15:22   #6
avware
Senior Member
 
Iscritto dal: Jul 2006
Città: Roma
Messaggi: 663
Non ricordo molto di C da quando mi sono spostato su Java, però forse può esserti sufficiente qualche accortezza. Isola le ricorrenze più semplici, ad esempio la virgola delle posizioni decimali; puoi sfruttare i stessi numeri float/double per restituire una quantità. Sostituisci il (.) con la (,) o viceversa nel caso la tua formattazione cambia.

Ultima cosa, il raggruppamento che hai scritto nell'esempio credo sia errato. Hai messo due raggruppamenti di cifre (anche se entrambi ogni tre) questo va semplicemente messo per calcolare ogni quanti numeri deve ricorrere un (.).

Riassumendo:
a) numero -> float/double
b) numero decimale -> sostituzione (.) con (,)
c) Calcolo del numero di cifre tra (.) e (,) della formattazione
d) creazione della stringa
__________________
Ho concluso positivamente con : SuperISD32, Latvia, guant4namo, Rubberick, animeserie, niciz, lleyton76, van-hallow, Corrado83
avware è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2007, 19:08   #7
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Vi posto l'intero programma così diventa tutto + chiaro...


Con la sprintf il dato va a finire dentro alla stringa num..poi sostituisco il . con la , quindi passo al ciclo..quando trova un # della stringa fmt sampa il numero corrispondente della stringa num..e dovrebbe fare così anche per il . e la ,(una volta ke la trova )

Ora vi chiedo..come posso partire da sinistra della virgola anzichè da destra??

Quote:
// dati globali
char fmt[] = "##.###.###,##";
char num[] = "";

double dato;



int main(void)
{

printf("immetti dato: ");
scanf("%lf",&dato);

dispnum(dato,fmt);

printf("\nfine programma...");
getch();
return 0;
} // end main


void dispnum(double dato,char fmt[])
{

char st[30];

//int LungFmt;

int i,j,k,m;


sprintf(num,"%4.4f",dato);
/* Sostituzione punto con virgola*/
for ( i=0; num[i] != 0; i++)
{
if( num[i] =='.'){
num[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
}
}


printf("\n%s",num);

strcpy(st,"");

i=strlen(fmt);
j=strlen(num)-1;


// k = lungh. massima fra fmt e uno
k=i;
if (j>k) k=j;

m=k;

for( i=0; i< m; i++)
st[i]= ' ';

st[k]='\0';
i--;
k--;

// Qui inizia il ciclo ke interessa le sostituzioni e lo scorrimento della stringa
while (i>=0 && j>=0) {
if (fmt[i] == '#') { // se mi trovi un # nella stringa fmt allora
st[k]=num[j];
k--;
j--;
}
if (fmt[i] == '.') { // se mi trovi un . nella stringa fmt allora
st[k] = '.';
k--;
}
if (fmt[i] ==','){ // questo non funziona...non capisco perchè..penso x il fatto ke devo partire da sinistra...
st[k]=',';
i--;
}
}
printf("\n ris. %s",st);
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2007, 13:04   #8
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
up
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2007, 20:47   #9
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Posto in pseudocodice, perchè purtroppo il mio C è un po' arrugginito: la mia idea sarebbe questa.

Codice:
1. Individuo la posizione della virgola nella stringa "fmt"
2. Calcolo il numero di segnaposto per le cifre decimali dopo la posizione della virgola
3. Trasformo il dato in num con la sprintf come hai fatto tu
4. Costruisco una stringa nuova, che comincia con il carattere "." e prosegue con una cifra "carattere" per ogni cifra di num dopo la virgola, copiandole paro paro; se il numero calcolato al punto 2 è minore delle cifre effettivamente presenti nel numero, faccio il padding con zeri fino alla fine dei segnaposto corrispondenti in "fmt"; altrimenti, mi fermo quando ho esaurito tutti i segnaposto
5. A questo punto, comincio dalla posizione calcolata in 2 nella stringa formato, e contemporaneamente dalla posizione calcolata della virgola nella stringa num. Il codice è uguale al tuo, con una differenza però: il controllo

if (fmt[i] ==','){
st[k]=',';
i--;
}

non è più necessario, perchè non incontrerai mai più il carattere "," nella stringa formato: se lo fai, vuol dire che il formato non è stato specificato correttamente (non ci può essere più di una posizione per le virgole) e lo segnali all'utente terminando anticipatamente il programma.
Non è brillantissima, ma dovrebbe funzionare.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN

Ultima modifica di Mixmar : 18-10-2007 alle 20:48. Motivo: Completamento
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2007, 18:44   #10
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Quindi cosa devo cambiare oltre a eliminare

if (fmt[i] ==','){
st[k]=',';
i--;
}

????
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
Marchi prestigiosi a prezzi da outlet su...
Upgrade PC a prezzi mai visti: Amazon sc...
Offerte Tado su Amazon: valvole termosta...
MSI Cyborg 15 con GeForce RTX 4060 e i7 ...
MacBook Air 2025 chip M4 a 949€, ma occh...
La sonda spaziale NASA New Horizons (che...
HONOR MagicPad 3: il tablet con Snapdrag...
Qualcomm mischia le carte: in arrivo ci ...
Meta sceglie Google per lo sviluppo dell...
Redmi Note 15 Pro+: batteria più piccola...
Amazon, un weekend di svendite lampo, ta...
Tutte le offerte sui portatili: tre tutt...
Macchie addio per sempre: SpotClean ProH...
Smartphone con batteria da 8.000 mAh? On...
Dreame L10s Ultra Gen 2 al minimo storic...
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: 10:51.


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