Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Le novità MSI del 2026 per i videogiocatori
Le novità MSI del 2026 per i videogiocatori
Con le nuove soluzioni della serie MEG, acronimo di MSI Enthusiast Gaming, l'azienda taiwanese vuole proporre per il 2026 una gamma di proposte desktop che si rivolgono direttamente all'utente più appassionato con schede madri, chassis e sistemi di raffreddamento. Non da ultimi troviamo anche gli alimentatori, che abbinano potenza a ricerca della massima sicurezza di funzionamento.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-03-2007, 11:43   #1
nicod83
Member
 
L'Avatar di nicod83
 
Iscritto dal: Jun 2005
Messaggi: 123
esercizio C

ciao ragazzi!
ho un problema con il seguente esercizio
qualcuno può darmi una mano? grazie!

TESTO
Si inizializzi la variabie intera 'a' in modo che il ciclo while esegua un
numero
finito di iterazioni e venga prodotta la stampa a video della stringa "X11"
(doppi apici esclusi).
Si commenti la soluzione. Alternativamente si sarebbe potuto stampare con
lo
stessa metodo la stringa "X-11"?

int main()
{
int a=...;
char* p=&a;
while(*p)
{
printf("%c",*p);
p++;
}
printf("\nFatto!");
}
nicod83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 12:15   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nicod83 Guarda i messaggi
TESTO
Si inizializzi la variabie intera 'a' in modo che il ciclo while esegua un
numero
finito di iterazioni e venga prodotta la stampa a video della stringa "X11"
(doppi apici esclusi).
Si commenti la soluzione. Alternativamente si sarebbe potuto stampare con
lo
stessa metodo la stringa "X-11"?
Uhm ... non è affatto chiaro! (almeno per me).
La stringa "X11" deve essere stampata in virtù di che cosa?? Cioè in che modo deve essere prodotta??

Quote:
Originariamente inviato da nicod83 Guarda i messaggi
int main()
{
int a=...;
char* p=&a;
while(*p)
{
printf("%c",*p);
p++;
}
printf("\nFatto!");
}
Questo codice non ha molto senso. Poi comunque quando fai p++ incrementi il puntatore 'p', che quindi va a puntare non più ad 'a' ma a ... qualcos'altro dopo.
E tra l'altro 'p' è un puntatore a char mentre tu assegni a 'p' l'indirizzo di un int ...
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 13:14   #3
nicod83
Member
 
L'Avatar di nicod83
 
Iscritto dal: Jun 2005
Messaggi: 123
è un esempio di esercizio d'esame...

lo so.. è quello il problema... p??
qualcuno ha qualche idea?
nicod83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 13:33   #4
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da nicod83 Guarda i messaggi
è un esempio di esercizio d'esame...

lo so.. è quello il problema... p??
qualcuno ha qualche idea?
Oltre al codice che se è un esempio credo di poter affermare che è un pessimo esempio, la domanda rimane la stessa, ovvero, la stringa in che modo dev'essere prodotta?

Mi spiego:

Hai una serie di stringhe e devi scegliere "X11";
Devi scorrere tutti i caratteri dell'alfabeto sino a raggiungere prima 'X', poi '1' e poi '1' (oppure '11') e metterli insieme per formare la stringa;
Devi estrapolarla da una stringa già esistente (ed eventualmente aggiungerci il carattere '-' in modo da farla diventare 'X-11').

etc..

Cioè, se ti hanno posto questo problema, te lo hanno posto in un modo tutt'altro che chiaro
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 13:34   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nicod83 Guarda i messaggi
qualcuno ha qualche idea?
Ripeto: dovresti spiegare meglio in che modo deve essere prodotta in output la stringa.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 13:45   #6
nicod83
Member
 
L'Avatar di nicod83
 
Iscritto dal: Jun 2005
Messaggi: 123
questo esercizio era sul file di esercizio proposti per l'esame...

non ci sono altre istruzioni..
bisogna inizializzare la variabile "a" e produrre in output 3 caratteri formando "X11"
nicod83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 14:01   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nicod83 Guarda i messaggi
questo esercizio era sul file di esercizio proposti per l'esame...

non ci sono altre istruzioni..
bisogna inizializzare la variabile "a" e produrre in output 3 caratteri formando "X11"
Sì ma ... 'a' di che tipo deve essere?? char? int? E devi basarti solo su questa variabile per il test del while e per mandare in output i caratteri??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 14:09   #8
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Come gia' fatto notare l'esercizio e' tutt'altro che chiaro e merita una risposta "sciocca":

Codice:
#include <stdio.h>

void main(void)

{
	int a=10;

	while (a--);

	printf("X11");
}
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 14:28   #9
mfonz85
Member
 
L'Avatar di mfonz85
 
Iscritto dal: Sep 2005
Città: Bus PCI 1, periferica 0, funzione 0 (Torino)
Messaggi: 213
Boh! Esercizio stranissimo

Codice:
int main()
{
   int a=88;
   char* p= &a;
   while(*p) {
      printf("%c",*p);
      if( *p == 49 ) { printf("%c",*p); *p = 0; }
      if( *p == 88 ) *p = 49;
   }
   printf("\nFatto!");
   system("pause");
}
Ho inizializzato a ad 88, ma dentro il while ho dovuto fare 2 if

P.S ah, e il gcc ovviamente da buon compilatore mi dice
Warning: inizialization from incompatible pointer type @line char* p= &a;
Non si possono fare giochetti del genere con puntatori a int e char, questo funziona solo per coincidenza...perchè lavoriamo su interi sempre minori di 255 (quindi rappresentabili su carattere ASCII)
__________________
Ho concluso affari con: Ippo 2001, Klintf, albert78, Piripikkio, starsky, oldfield e IL0V€INT€R. da EVITARE zarovat

Ultima modifica di mfonz85 : 16-03-2007 alle 14:30.
mfonz85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 14:39   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Sorgente meno "banale"???
Questo:
Codice:
#include <stdio.h>

int main (void)
{
    int a = 88;

    while (a) {
        printf ("%c", (char) a);
        a = a == 88 ? 49 : a == 49 ? 305 : 0;
    }

    printf ("\n");
    return 0;
}
Però mi sembra quasi più roba da IOCCC che un esercizio!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 14:40   #11
pierosa
Member
 
Iscritto dal: Jan 2007
Messaggi: 189
Codice:
int main()
{
    int a= 3223896;
    char* p=&a;
    while(*p)
    {
        printf("%c",*p);
        p++;
    }
    printf("\nFatto!");
}
prova così

EDIT: ho corretto prima stampava W11 ora stampa X11 come avevi chiesto

Ultima modifica di pierosa : 16-03-2007 alle 15:05.
pierosa è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 15:32   #12
mfonz85
Member
 
L'Avatar di mfonz85
 
Iscritto dal: Sep 2005
Città: Bus PCI 1, periferica 0, funzione 0 (Torino)
Messaggi: 213
Quote:
Originariamente inviato da pierosa Guarda i messaggi
Codice:
int main()
{
    int a= 3223896;
    char* p=&a;
    while(*p)
    {
        printf("%c",*p);
        p++;
    }
    printf("\nFatto!");
}
Ok, spiegaci
Hai sfruttato gli overflow??

Quote:
Originariamente inviato da andbin Guarda i messaggi
Codice:
   a = a == 88 ? 49 : a == 49 ? 305 : 0;
Cos'è sta roba??
__________________
Ho concluso affari con: Ippo 2001, Klintf, albert78, Piripikkio, starsky, oldfield e IL0V€INT€R. da EVITARE zarovat
mfonz85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 16:07   #13
pierosa
Member
 
Iscritto dal: Jan 2007
Messaggi: 189
Quote:
Originariamente inviato da mfonz85 Guarda i messaggi
Ok, spiegaci
Hai sfruttato gli overflow??
in c un char è composto da un byte dunque 8 bit.
il codice ascii di X è 88 che in binario è 1011000 (01011000 aggiungiamo uno 0 all'inizio per ottenere 8 bit)
il codice ascii di 1 è 49 che in binario è 110001 (00110001 come sopra)
un intero a 32 bit può dunque contenere 4 caratteri, che sono necessari per contenere la string "X11\0", il carattere \0 è necessario per delimitare la fine della stringa.
ora dobbiamo trovare un intero che sia rappresentato in memoria nello stesso modo della stringa "X11\0", siccome i byte degli interi in memoria vengono invertiti l'intero che stiamo cercando è questo
00000000 00110001 00110001 01011000 (in binario, ho separato i byte con uno spazio)
3223896 (in decimale)
assegnando l'indirizzo di questo numero ad un puntatore a carattere (p nel nostro esercizio) questo conterrà l'indirizzo del primo byte di a che rappresenta la W. Per l'aritmetica dei puntatori in c, p++ passa al prossimo byte (perchè p è dichiarato come puntatore a char, se fosse stato dichiarato come puntatore ad int non avrebbe funzionato).
pierosa è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 16:09   #14
mfonz85
Member
 
L'Avatar di mfonz85
 
Iscritto dal: Sep 2005
Città: Bus PCI 1, periferica 0, funzione 0 (Torino)
Messaggi: 213
Quote:
Originariamente inviato da pierosa Guarda i messaggi
in c un char è composto da un byte dunque 8 bit.
il codice ascii di X è 88 che in binario è 1011000 (01011000 aggiungiamo uno 0 all'inizio per ottenere 8 bit)
il codice ascii di 1 è 49 che in binario è 110001 (00110001 come sopra)
un intero a 32 bit può dunque contenere 4 caratteri, che sono necessari per contenere la string "X11\0", il carattere \0 è necessario per delimitare la fine della stringa.
ora dobbiamo trovare un intero che sia rappresentato in memoria nello stesso modo della stringa "X11\0", siccome i byte degli interi in memoria vengono invertiti l'intero che stiamo cercando è questo
00000000 00110001 00110001 01011000 (in binario, ho separato i byte con uno spazio)
3223896 (in decimale)
assegnando l'indirizzo di questo numero ad un puntatore a carattere (p nel nostro esercizio) questo conterrà l'indirizzo del primo byte di a che rappresenta la W. Per l'aritmetica dei puntatori in c, p++ passa al prossimo byte (perchè p è dichiarato come puntatore a char, se fosse stato dichiarato come puntatore ad int non avrebbe funzionato).
grande, che pensata
__________________
Ho concluso affari con: Ippo 2001, Klintf, albert78, Piripikkio, starsky, oldfield e IL0V€INT€R. da EVITARE zarovat
mfonz85 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 16:10   #15
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da mfonz85 Guarda i messaggi
Ok, spiegaci

Cos'è sta roba??
E' l'utilizzo degli operatori ternari in C.

per esempio:

Codice:


if( a > b)
{
   c = a;
}
else
{
   c = b;
}

//si può anche scrivere:

c = (a > b) ? a : b;
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 16:10   #16
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da mfonz85 Guarda i messaggi
Ok, spiegaci
Hai sfruttato gli overflow??
overflow?? No no.
pierosa ha sfruttato il fatto che il numero decimale 3223896 in esadecimale è 313158h e siccome sulle architetture Intel che sono "little-endian" i byte sono memorizzati dal meno significativo al più significativo, in memoria il valore intero è memorizzato come:

58h 31h 31h 00h
dove i 3 valori sono appunto i codici ASCII dei caratteri X 1 1
Con 'p' punta ai singoli byte che compongono l'intero. L'ultimo è appunto nullo quindi fa da terminatore

Quote:
Originariamente inviato da mfonz85 Guarda i messaggi
Cos'è sta roba??
Io invece ho usato una strada diversa. ?: è un operatore ternario. La mia espressione è equivalente a:
Codice:
if (a == 89)
    a = 49;
else if (a == 49)
    a = 305;
else
    a = 0;
Anche qui uso i codici ASCII dei caratteri ma dal momento che si devono stampare due '1', devo differenziarli. 305 in hex è 131h, castato a (char) vale solo 31h ma così il valore intero è diverso dall'altro (49).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 16:25   #17
pierosa
Member
 
Iscritto dal: Jan 2007
Messaggi: 189
Quote:
Originariamente inviato da andbin Guarda i messaggi
overflow?? No no.
pierosa ha sfruttato il fatto che il numero decimale 3223896 in esadecimale è 313158h e siccome sulle architetture Intel che sono "little-endian" i byte sono memorizzati dal meno significativo al più significativo
infatti la mia soluzione funziona con questo tipo di architettura, non è detto che in altre funzioni.
L'esercizio come è stato proposto è ambiguo perchè non specifica appunto l'architettura che si sta considerando.
anche la seconda domanda non è del tutto corretta, infatti se si sta lavorando su un sistema in cui gli int sono a 32 bit, la stringa "X-11" non può essere contenuta in un int, ma se stiamo lavorando su un sistema con int a 64 bit (credo che esistano) allora un intero può contenere stringhe di 7 caratteri più il terminatore.
pierosa è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 18:23   #18
nicod83
Member
 
L'Avatar di nicod83
 
Iscritto dal: Jun 2005
Messaggi: 123
grazie!!

grazie 1000 pierosa!!!

..chiaramente non era un esercizio banale!!
nicod83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 20:34   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nicod83 Guarda i messaggi
grazie 1000 pierosa!!!
E a me grazie ... no? Che ho fatto tutto con 1 sola variabile???

Scherzo ... non c'è problema.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-03-2007, 21:14   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da andbin Guarda i messaggi
Uhm ... non è affatto chiaro! (almeno per me).
La stringa "X11" deve essere stampata in virtù di che cosa?? Cioè in che modo deve essere prodotta??

Questo codice non ha molto senso. Poi comunque quando fai p++ incrementi il puntatore 'p', che quindi va a puntare non più ad 'a' ma a ... qualcos'altro dopo.
E tra l'altro 'p' è un puntatore a char mentre tu assegni a 'p' l'indirizzo di un int ...
esattamente è proprio questo il punto: l'esercizio (assolutamente schifoso a mio parere ) vuole che tu definisca un valore di a percui quella printf finisce per stampare "X11". e probabilmente il testo è stato riportato in maniera errata perché non è possibile stampare anche gli apici (un int è da 4 bytes, quindi ci puoi stampare al massimo 4 caratteri di cui uno deve essere il terminatore nullo per uscire dal while, quindi 3; ecco perché la risposta all'ultima domanda è no).


EDIT - ehm, scusate, avevo letto solo i primi due post...

comunque vorrei farvi notare che è assolutamente errato definirlo un esercizio di C, in quanto il valore di a è diverso a seconda che la macchina sia big-endian o little-endian

Ultima modifica di 71104 : 16-03-2007 alle 21:16.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Fibra di carbonio, lega di magnesio e 8....
Inaugurato il Padiglione Italia al CES 2...
AGON PRO AG276QSG2: NVIDIA G-Sync Pulsar...
MSI mostra la scheda madre consumer con ...
MSI rinnova l'intera offerta notebook al...
Laifen Wave Pro: debutta al CES lo spazz...
XGIMI Titan Noir Max: al CES il videopro...
Atlas di Boston Dynamics: il robot umano...
TV da 130 pollici ed elettrodomestici, p...
I giochi classici cambiano volto con RTX...
OpenAI testa la pubblicità in Cha...
Plaud riscrive il modo di prendere appun...
Narwal presenta a Las Vegas la nuova gam...
1000W solo per la scheda video: la GeFor...
NVIDIA espande GeForce NOW: nuove app Li...
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: 20:18.


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