Lezione 3: Gestione delle Variabili e Costanti - Linguaggio C [CORSO COMPLETO]

Поділитися
Вставка
  • Опубліковано 19 гру 2024

КОМЕНТАРІ • 40

  • @pincopanco88
    @pincopanco88 4 місяці тому

    Sei un grande. Sei nato per fare il professore. Ma non tutti noi siamo nati per fare i tuoi allievi ❤

  • @64etto
    @64etto Рік тому

    A me ogni riga mi viena segnalato un warning: format '%d' expects argument of type 'int', but argument 3 has type 'long long unsigned int' [-Wformat=]|=== Build finished: 0 error(s), 15 warning(s) (0 minute(s), 0 second(s)) ===| tempo filmato 0:00 al 4:37.

  • @rugghero
    @rugghero 11 місяців тому

    è possibile modificare il valore delle costanti di enumerazione in un secondo momento? (tramite ad esempio la funzione scanf)?

  • @mcJOLLUX
    @mcJOLLUX Рік тому

    L'output che mi esce è corretto, però quando faccio il debug mi avvisa dalla riga 8 alla 14 sulla colonna 23 dicendo: "format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Wformat=]". Cosa sta a significare?

  • @RanieroAlbanesi
    @RanieroAlbanesi 9 місяців тому +1

    Ciao, mi sono appena iscritto, e sto muovendo i primissimi passi in C. Ho provato le variabili con cast printf("%s %.9f
    ", "Con cast:", ris1); impostando x e y come nel video, ma con 9 cifre decimali. Mi aspettavo un 33.333333333 invece è uscito un 33.333332062 . Perchè succede questo?

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  9 місяців тому

      Questo è un problema che riguarda vari fattori. Quando vuoi lavorare con valori in virgola mobile c'è il problema della rappresentazione, che più vai nel profondo (cioè più aggiungi decimali), più aumenta la difficoltà (a partire da settembre dovrei fare uscire la playlist di video riguardo l'architettura degli elaboratori, lì troverai dei video dedicati dove spiego anche questo problema).

  • @mcJOLLUX
    @mcJOLLUX Рік тому

    Sto usando Visual Studio (anche se non credo dipenda dall'IDE), non mi riconosce LONG_LONG_MIN e ULONG_LONG_MAX, ho dovuto invece usare LLONG_MIN e ULLONG_MAX.

  • @SpaceSecretMy
    @SpaceSecretMy 2 роки тому +1

    Ho iniziato quest'anno cybersecurity all'uni e pur rivedendo le lezioni registrate, avere un concetto chiaro di programmazione è un po' come giocare ad un puzzle perché i professori tra loro non comunicano (per un corso ne abbiamo due + uno per il laboratorio tecnico) quindi c'è chi in una lezione va avanti, chi torna indietro e ci spiega cosa effettivamente abbiamo fatto nella lezione precedente uscendosene con "ah ma il professore non vi ha spiegato questo e come lo avete fatto?". Sono approdata sul tuo canale stamani per capirci qualcosa e SPIEGATE BENISSIMO BENISSIMO, complimenti. Vi ringrazio tantissimo per aver postato queste lezioni.
    p.s
    dovrei acquistare un portatile da portare in sede all'uni per quando svolgiamo laboratorio, che caratteristiche dovrei vedere del pc per questo scopo? avete suggerimenti? (potete anche non rispondermi)

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  2 роки тому

      Ti ringrazio, dove frequenti il corso di cyber security?
      Per quanto riguarda il portatile e programmare in C può andare bene uno da 600/700€ (così che non sia nemmeno troppo scarso per fare altro). Se invece segui altri corsi dove è richiesta una maggiore potenza di calcolo e ti occorre una scheda grafica dedicata, ti tocca andare sui 1000€ e passa

    • @pwDalta
      @pwDalta Рік тому

      Unimi? Io ho appena fatto domanda di ammissione per chbersecurity all’unimi

  • @marco6954
    @marco6954 4 роки тому +3

    Mi fa piacere vederti ripubblicare video sulla programmazione, bravo (anche per aver abbandonato DevCpp, come dici in un precedente video :P )!
    ----
    Solo alcune osservazioni:
    "se si andasse oltre il limite consentito nel range delle variabili riceverei un buffer overflow"
    Non è proprio così per 2 ragioni:
    1) si tratterebbe di un integer overflow (o in generale, di un arithmetic overflow) e non di un buffer overflow;
    2) dipende dal compilatore la presenza di un check
    Ad esempio con GCC esistono delle funzioni built-in per effettuare il check (__builtin_add_overflow ); tuttavia se non lo si utilizza si verifica il classico wrap around (sarebbe un undefined behavior, ma nella pratica è un modulo 2).
    Per fare un esempio:
    n (INT_MAX): 2147483647
    n + 1: -2147483648
    In pratica essendo il range massimo di un signed int quello riportato da n (INT_MAX), sommando 1 si va "oltre il limite". Nella pratica diventa negativo a causa del bit più significativo posto a 1 (concetto che poi tratti poco dopo nel video).
    Di solito ormai si consiglia di utilizzare l'header "stdint" per i tipi, quindi ad esempio: int32_t, uint32_t etc etc
    ----
    Attenzione ai #define: non sono costanti, è solo una "label" che viene rimpiazzata prima della compilazione (appunto, dal preprocessore); inoltre rendono più complesso il debug, non esistendo in memoria; lo dico in particolare ai novizi.

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  4 роки тому +1

      Apprezzo, ma così fai spoiler per il corso di architettura dove viene spiegato nel dettaglio quell'errore. Ho deciso di tenerli separati e quindi per uno al momento che pratica Programmazione 1 deve sapere di non eccedere, quando poi uno vuole studiarsi architettura degli elaboratori allora scopre il problema del complemento a 2 che è quello di far diventare il numero oltre il limite negativo, o da negativo a positivo.
      Per essere precisi l'overflow avviene se la somma di due positivi dà negativo e viceversa.
      Quindi questo discorso al momento non è particolarmente importante chiarirlo, non sarebbe pertinente quasi. Lo è in architettura degli elaboratori.
      Per quanto riguarda define è un preview dell'intero uso che verrà spiegato nel video relativo solo al preprocessore. Al momento all'utente serve imparare l'atto pratico, poi sempre durante il corso svelo ogni taboo lasciato indietro sennò non posso starmi dietro e il video diventa troppo noioso (ho cercato di studiare come portare gli argomenti in modo da non appesantire, ma fare quasi tutto nell'arco di una 30ina di video, alcuni proprio specifici come preprocessore ecc.)
      Apprezzo comunque l'intervento, anche se rientrava nei miei piani di suddivisione corso.

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  4 роки тому +1

      Per esempio le variabili con unsigned non gestiscono il range negativo e il calcolatore non usa il complemento a 2 per codificarla (come avviene invece per le variabili signed, parlo sempre di interi), ma usa la codifica a modulo se non sbaglio.
      Lì se, facendo un esempio, posso gestire 8 bit di spazio per la mia variabile e una somma mi richiede il nono bit quell'1 viene tagliato fuori.
      Ora il mio errore non è più come nelle variabili signed con il complemento a 2.
      Per le variabili a virgola mobile la codifica è ancora diversa perché uso la codifica modulo e segno per la mantissa e la codifica a virgola fissa per la parte frazionaria.
      Capisci ora che spiegare quattro differenti codifiche non trova spazio in questo corso (che è Programmazione 1), ma lo trova in architettura degli elaboratori. Qui avrei anche potuto dire semplicemente overflow, ma per qualcuno sarei sempre stato generale e sarebbe iniziata ancora la discussione ahah.
      Tutto verrà a suo tempo, al momento questo è il corso di programmazione 1, non architettura.

    • @marco6954
      @marco6954 4 роки тому +2

      @@ProgrammazioneTimeOfficial invece lo trovo pertinente per una ragione in particolare: se vai oltre al limite il numero diventa effettivamente negativo; è molto "pratico", in quanto si verifica un errore che non viene segnalato in compilazione (e non è un buffer overflow). Le uniche ragioni del mio intervento sono queste. ;)
      In merito al preprocessore hai ragione, non volevo "spilerare" o anticipare ciò che tratterai in modo approfondito in seguito.

    • @marco6954
      @marco6954 4 роки тому +2

      @@ProgrammazioneTimeOfficial ti stavo rispondendo per bene al resto, ma è saltata la corrente un'altra volta (mi arrendo)...
      Comunque il discorso era per sottolineare "non aspettatevi un errore in compilazione, perchè rimarrete delusi, e incapperete nell'overflow del numero" e "non è un buffer overflow".
      In merito al compilatore se inizializzassi una variabile unsigned int al suo valore massimo le verrebbe assegnato -1 (0xFFFFFFFF); se la tratti come signed int, le viene assegnato 0x7FFFFFFF.
      Se alla unsigned sommi 1, ottieni come risultato 0 (penso sia ciò che intendi con l'esempio che fai a 8bit)
      Se sommi 1 alla signed, ottieni 0 (che è quando va in negativo nel mio esempio sopra).
      Ps. complimenti anche per la realizzazione di questi nuovi video, davvero ben fatti!

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  4 роки тому +2

      Non sto difendendo quello che ho detto nel video, aver detto buffer overflow non è stato il termine corretto, perché per le variabili signed non ho appunto quell'errore, il buffer overflow è presente altrove. Intendevo per l'unsigned solo per una questione di codifica (l'unsigned usa codifica a modulo e il signed usa complemento a 2, in questo caso il mio overflow ha un risultato diverso da entrambi)... Ugualmente spiegare nel corso di programmazione 1 le codifiche e gli eventuali overflow non serve, servirà ripeto nel corso di architettura degli elaboratori.
      Non so se ci siamo fraintesi entrambi, ma dico che con buffer overflow ho generalizzato inserendoci erratamente tutti i tipi di dato, ma rimedierò nel corso di architettura dove è il luogo in cui parlarne

  • @idlecsfr
    @idlecsfr Рік тому

    Ho una domanda: nel enum allora il tipo è int,(siccome parte da 0 e procede in senso ordinato intero)?

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  Рік тому +1

      più che int, direi un tipo di dato unsigned perché non codifica valori negativi

    • @idlecsfr
      @idlecsfr Рік тому

      @@ProgrammazioneTimeOfficial capito. Grazie

  • @Watgem-yw4ee
    @Watgem-yw4ee 4 роки тому +1

    Va bene una build con : ryzen 5 3400g + rtx 1650 + hard dick 1 tera + MSI B365M PRO-VH scheda madre + cooler master V3?

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  4 роки тому

      Sarò molto diretto: assolutamente no. Manca un ssd, la 1650 è sovrapprezzatissima e punterei ad una 1660 super in offerta, la scheda madre fa veramente schifo e ti direi di andare su una b550 di qualunque marca, processore non capisco perché hai scelto un G e punterei di più ad un 3600, alimentatore ti direi di andare sul sicuro con un EVGA da 600w e case prenderei un masterbox 5 per rimanere tema cooler master.

    • @Watgem-yw4ee
      @Watgem-yw4ee 4 роки тому

      @@ProgrammazioneTimeOfficial ho risolto con una ryzen 5 2600x e una gigabyte B450 però la 1650 la tengo perché ho un budget basso e la preferisco alla 1050

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  4 роки тому

      ti direi di prendere la 1650 super però...l'offerta la trovi sicuramente, altrimenti punta ad una rx 570/580 da 8gb. La 1650 normale è veramente sovraprezzata. Per il resto sono contento per te

    • @Watgem-yw4ee
      @Watgem-yw4ee 4 роки тому +1

      @@ProgrammazioneTimeOfficial ho preso la super comunque

  • @robertosaltarelli5533
    @robertosaltarelli5533 Рік тому +2

    Sono alla terza lezione, vorrei iniziare a programmare da zero ma sicuramente non è questo il corso giusto, troppo avanti e complicato per chi è completamente all'oscuro, grazie cmq.

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  Рік тому +1

      Sì, questo corso è da accompagnare per lo meno con uno dei libri che ho lasciato in descrizione. Più sull'idea di università ecco

    • @robertosaltarelli5533
      @robertosaltarelli5533 Рік тому +1

      Mi consigli dei libri per iniziare a programmare partendo da zero? Sono un gamer, ho 45 anni, uso i pc da quando ero bambino ma non mi sono mai avvicinato alla programmazione, ultimamente però mi sta venendo voglia di imparare, grazie.

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  Рік тому

      Per prima cosa dipende su quale linguaggio vuoi buttarti e soprattutto qual è il tuo fine. Sebbene io consigli l'approccio tradizionale del C (più rivolto a chi vuole intraprendere la carriera da informatico), probabilmente per chi ha altri fini (come anche la curiosità) mi spingerei a consigliare python, soltanto per la sua semplicità.
      Un buon libro aiuta agli inizi ad avere uno schema strutturato dei passi da seguire. La programmazione non è certamente una cosa che si impara dall'oggi al domani e partire senza guide è lungo e maggiormente faticoso.
      Se vuoi approcciare al python ti consiglio questa serie:
      www.py4e.com/
      Oltre a consigliarti dei libri, ha un set di lezioni che puoi seguire

    • @robertosaltarelli5533
      @robertosaltarelli5533 Рік тому +1

      Grazie per la risposta, essendo appassionato di videogame da Circa 40 anni, sicuramente il fine è la creazione di Videogame. Infatti ho scaricato uniti e pare sia indicato il c# come linguaggio da usare. Essendo proprio a zero, consigliami te, grazie. Qualcosina sto iniziando già a capirla, come sommare due numeri, come creare una variabile, come installare il visual studio per creare l’ambiente, ma sono proprio a zero. Anche riuscire a creare con unity un semplice 2D fra un po’ mi renderebbe soddisfatto inizialmente. A mia figlia di 12 anni sto facendo studiare phyton invece

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  Рік тому +1

      Allora il C# è il tuo fine. È un linguaggio abbastanza verboso simile a Java per sintassi, decisamente un suicidio partire con quello.
      A te serve iniziare più a "basso livello". Ti consiglio di dare un'occhiata alla playlist che ho fatto sugli algoritmi e flowchart e magari di iniziare dal C. Poi quando ottieni una sufficiente base di nozioni passi a C#.
      Quindi il mio consiglio è entrare nell'ottica di COSA stai facendo e piano piano entri nel COME farlo.
      In successione:
      Algoritmi & Flowchart (cerca di affiancare questi concetti al C)
      ua-cam.com/play/PL83Ordjpzm5quIe-KzTGdJGKheEFFLsxh.html
      Dopo che ottieni una sufficiente base di C e hai compreso bene gli step mentali passi a C#.
      Se tu nel passare da C a C# dovessi trovare molta difficoltà (cambia il paradigma e non è poco), allora approccia in modo intermedio al concetto di oggetti con C++ o Java.

  • @psyco8532
    @psyco8532 4 роки тому

    Bel video!👍👍
    Nome canzone intro?☺☺

  • @rugghero
    @rugghero 3 роки тому

    Ma le variabili possono essere nache lettere/parole?

    • @ProgrammazioneTimeOfficial
      @ProgrammazioneTimeOfficial  3 роки тому

      Tu puoi dare un qualsiasi nome alla variabile, basta che non inizi con determinati caratteri speciali o numeri o parole separate.
      Quindi, esempi di variabili NON valide:
      int 4var;
      int %nome;
      int parole separate;
      Valgono invece:
      int nome_composto_in_questo_modo;
      int variabile;
      int prova5;
      Ovviamente i nomi hanno senso quando hanno una relazione con il loro scopo.

  • @peppo8563
    @peppo8563 4 роки тому

    Ma con che app devo aprire il file?

  • @giuseppecesarino1859
    @giuseppecesarino1859 4 роки тому +2

    vatti a ricordare tutto ::::

  • @TheKookered
    @TheKookered 2 роки тому

    Voglio un gameplay di minecraft fatto da lui