Newsgroup: it.comp.lang.c++
Titolo: Chi aiuta un newbie?

Ciao a tutti,
e' la terza volta che tento di ricominciare ad imparare la programmazione in
C++.
Per questo ho acquistato l'ennesimo libro sull'argomento per non tediarvi
con inutili problemi iniziali.
Il libro in questione e': Chi ha paura dek C++ di S.Heller, da qualcuno
consigliatomi tempo fa.
Ho due stupide domande da porvi:
-l'autore parla, nella spiegazione dell'hardware della macchina, di registri
presenti nella CPU dedicati al sistema operativo.
La domanda è la seguente: Il registro di Windows (che si sputtana un giorno
si e l'altro anche) ed e' scritto su HD viene caricato durante l'avvio
proprio in questa parte di CPU? Mi spiegherei cosi' il deterioramento
progressivo delle prestazioni del computer che, alla fine, costringe al
classico format. Ho ragione?
-Ed ora la domanda seria.
ho qualche difficoltà nella comprensione del sistema matematico
binario/esadecimale. Non ridete... credo sia importante comprenderlo bene.
Allora:
nel sistema decimale ho simboli che vanno da 0 a 9 e combinazione di questi;
nel sistema binario ho simboli che vanno da 0 a 1 e combinazione di questi;
nel sistema esadecimale ho simboli che vanno da 0 a f.
Supponendo di avere la possibilità di una parola di 2 caratteri potro'
scrivere numeri:
da 00 a 99 nel sistema decimale;
da 00 a 11 nel sistema binario;
da 00 a ff nel sitema esadecimale.
E' tutto giusto fin qui?... credo di si.
Il problema sorge nelle operazioni perche' mi costringo a far passare tutto
attraverso il sistema decimale (per me ovviamente più semplice) che e' un
sistema ingarbugliato ed inutile.
Se dovessi, in esadecimale, fare 1a+2e  (e' l'esempio del libro) il
risultato dovrebbe dare 48... non capisco come. Lui dice:
(1(1*16)+a(10*1))+
(2(2*16)+e(14*1))=
---------------------
(3(3*16)+18(24*1))???? Ho capito tutto tranne il 18. Da dove salta fuori? Ho
terrore a pensare ad un 2adc+8dcf.
Mi spiegate la logica?
Lo so, avrei dovuto postare su it.matematica.1elementare ma non c'e' :-)
Grazie per la pazienza.
---
Ciao... Unlucky Man
---

 3 (3*16) 18 (24*1 = 1*16 + 8*1) Segno 8 e porto 1
  4 (4*16)  8 (8*1)
E' piu' chiaro? 
Comunque, se quello che ti interessa e' imparare il C++ mi pare che il
tuo libro la prenda molto alla lontana...
Ciao,
Nicola

 Grazie per la pazienza.
ne hanno avuta con me,ne avrai tu con gli altri
P.S.: visto che non capirai la mia spiegazione astrusa,per ogni dubbio
scrivi 
pure.io
 staro' collegato ancora un po',e magari trovi qualcuno
piu'bravo di me
-- 
Ciao,Marcello   
ig...@dist.unige.it

 decimale puoi fare 9 rappresentazioni,con uno binario solo due
AAAAAH!! con uno decimale le rappresentazioni sono dieci!!! (da 0 a 9)
scusa,ma la stanchezza fa' brutti scherzi
-- 
Ciao,Marcello   
ig...@dist.unige.it

Mi spiegate la logica?
Qualsiasi base dati tu stia considerando, la logica di fondo e' sempre
la stessa.
1a significa a unita' + 1 gruppo da 16 (valore decimale) unita'
2e significa e unita' + 2 gruppi da 16 unita'
Sommare e ad a significa fare la seguente operazione :
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
          +             =
          0123456789abcdef
che come vedi da' 18 (che, bada bene, non si legge 'diciotto') come
risultato (cioe' 8 unita' e 1 gruppo da 16).
Sommare 1 gruppo da 16 a un 2 gruppi da 16 vuol dire ottenere 3 gruppi
da 16, che sommati a 8 unita' e 1 gruppo da 16 precedenti, fanno
esattamente 4 gruppi da 16 e 8 unita', ovvero il numero 48
esadecimale.
Una volta che hai imparato la logica di base, non avrai paura piu' di
nulla :
Risolviamo 2 a d c + 
           8 d c f :
(le frecce indicano le cifre del risultato finale)
c + f = 1b --------------------------> b
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
            +              =
            0123456789abcdef
d + c = 19
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
             +           =
             0123456789abcdef
19 + 1 (riporto) = 1a ---------------> a
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
                         +=
                         0123456789abcdef
a + d = 17
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
          +            =
          0123456789abcdef
17 + 1 (riporto) = 18 --------------> 8
000000000000000011111111111111112222222222222222
0123456789abcdef0123456789abcdef0123456789abcdef
                       +=
                       0123456789abcdef
2 + 8 = 0a
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
  +       =
  0123456789abcdef
0a + 1 (riporto) = 0b --------------> b
00000000000000001111111111111111
0123456789abcdef0123456789abcdef
          +=
          0123456789abcdef
Da cui si deduce che 
  2 a d c + 
  8 d c f =
-----------
  b 8 a b
Spero di non averti confuso le idee !!!! :)

Prima di cominciare... grazie ad Anakin, Nicola, Andrea ed a tutti gli altri
che potrebbero aver risposto nel frattempo.
Riassunto delle puntate precedenti:  :-)
--- [CUT]--- Registri
Ok!!! Avevo fatto un pò di confusione... grazie, avevo pensato che le due
cose non avessero alcun nesso (portare il file registro di Windows nei
registri della CPU sarebbe impraticabile vista la poca disponibilita' di
questi ultimi) ma... meglio chiedere per esserne sicuri.
---[CUT]--- Strategie dell'autore
In effetti l'approccio che Heller ha con il linguaggio e' 'molto alla
lontana'.
E' anche vero che e' stata la mia ennesima scommessa con me stesso. Questo
e' il 3 o 4 tentativo di cominciare a capirci qualcosa. Ho scelto il C++
perche' e' piu' robusto e portabile di altri linguaggi.
La mia prima volta e' stata con un Amiga 1200 (accessoriato) ed il testo C e
C++ della McGraw Hill (non ne ricordo l'autore, sono in ufficio e non l'ho
sotto mano), non avevo accesso ad Internet (che non era cosi' diffuso) e mi
aiutavo con la BBS. Ho mollato quando sono arrivato ai puntatori ed al
reindirizzamento.
La seconda volta avevo Un Ms-Dos con Windows, ho acquistato Programmare in
Visual C 6.0 ancora MCGraw Hill... mi sono bloccato piu' o meno allo stesso
punto.
Questa volta spero di avere piu' fortuna, trenacia, pazienza. Il libro e'
una specie di romanzo; trovo le parti di 'non programmazione' utili per la
comprensione del funzionamento della macchina e ti rilassano un po'.
E poi... questa volta ci siete voi :-) (ed i due libri che ho gia'... C++,
ma quanto mi costi?)
--- [CUT]--- Confusione su parola e carattere
In effetti ho sbagliato nella scelta dei termini ma non sapevo cos'altro
usare per esprimermi... Sequenza di simboli (o cifre... come consigliato da
Andrea) sarebbe forse andata meglio? Intendevo dire che:
00 e' una sequenza di due simboli binari... giusto?
1e e' una sequenza di due simboli esadecimali. OK?
Forse cosi' va meglio... spero di aver capito il lessico...
Il effetti i termini parola e carattere possono aver generato dubbi...
collidono terribilmente con altri concetti del C.
---[CUT]--- Matematica esadecimale
... se penso che questa roba l'ho gia' studiata 16 anni fa in 'teoria e
applicazione macchine calcolatrici' e non me ne ricordo piu' una m**a... mi
va' il sangue al cervello (che poi... non ci va sempre? mha)
Allora vediamo se ho capito:
Decimale: 235 e' in pratica = (2*10^2)+(3*10^1)+5
Esadecimale: 2ec e' in pratica = (2*16^2)+(e*16^1)+c
Supposto che questo sia vero...:
2(16^2)+e(16^1)+c    +
4(16^2)+b(16^1)+f     = seguitemi vi prego, nel ragionamento!!!
---------------------
esamino c+h = (12+15 in decimale) = (27 in decimale)
    a cui devo sottrarre la base (16 per riaverlo in esadecimale), quindi
27-16=11, da cui
    1(16^1)+b in esadecimale... sara' corretto? mha... continuo
esamino e+b = (14+11 in decimale) = (25 in decimale)
    a cui devo sottrarre la base, quindi 25-16=9, da cui
    1(16^2)+9(16^1)
esamino 2+4... vabbe' questo e' facile 6(16^2)
quindi cos'ho:
[6(16^2)+1(16^2)] + [9(16^1)+1(16^1)] + b, quindi 7ab
.... vi prego... ditemi che e' corretto... !!!! anche se non lo e'...
scherzo.
---[CUT]--- Nuovo dilemma.
Ho continuato nella lettura del libercolo ed eccomi a scrivere il primo
codice.
Problema: inserire un numero, aggiungerci 1, visualizzare il risultato.
Strumenti: Microsoft Visual C++ 6.0.
Soluzione:
----------
#include <iostream.h>
int main()
{
 short n;
 cout << "Inserisci il numero degli ospiti:\n";
 cin >> n;
 cout << "Il numero dei posti necessari sono: "<<n+1;
 return 0;
}
--------------
ottengo 2 errori (non credo nel codice) ma riferito a 'qualcosa' di esterno.
--------------------Configuration: test3 - Win32 Debug--------------------
Compiling...
test3.cpp
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
_WinMain@16
Debug/test3.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
test3.exe - 2 error(s), 0 warning(s)
------------------------------
ma che vuor di? Tnks.
--- [CUT]--- riflessioni
Il bello del C++, una delle sue potenzialità e' la portatilità
dell'applicazione. Mi piace pensare che se imparo il C++ e realizzo un
piccolo programmillo, potro' ricompilarlo un domani (con le opportune ma
minime modifiche) per Linux (sistema al quale passero' sicuramente), BeOs,
ecc.
Ma se scrivo applicazioni per win32... che senso ha? Sono specifiche per
questo ambiente... giusto?
O meglio... so che gli header sono standard ed imposti da C++ ma il dubbio
che ho, credo leggittimo vista la mania monopolista di Microsoft, e' di
ritrovarmi con sorgenti non-portatili.
E' giusto? Che alternative ho?
Grazie a tutti ancora una volta per la pazienza...

 [CUT]
Ehehe :)) il registro di winzoz e' moooolto peggio :))) Il fatto sta' che
windows tente a rallentare ad ogni installazione e disinstallazione perche'
il numero di programmi che si prograno in continuazione e' esorbitante!
Ogni prg ci lascia lo zampino, installshield ovviamente non rimuove nulla
perchè alla fine e' sempre cosi' e il registro aumenta di dimensioni...
Poi tutti stì clsid ecc ecc che non voglio NEMMENO sapere ;)) a cosa
servono realmente a mano non li tocco e tantomeno ci faccio passare un prg
per eliminarli! C'è una soluzione al rallentamento continuo: 2 partizioni,
2 os e uno con cui si fanno tutte le prove e i test...
centra ben poco con la programmazione ma lasciamo strare va' =)
-- 
Wave++, member of EventOrizon software
http://members.xoom.it/wavexx

 Ma stai rispondendo a me ? :)

che trovi tutto
Ma io non avevo bisogno di queste informazioni !!!
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>