Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Condizioni booleane

    Salve a tutti.
    Sono qua per chiedere chiarimenti sulle condizioni di verità con i tipi booleani.
    L'esercizio sul quale mi sono inbattuto è il seguente:

    "Siano dati due file numeri1.txt e numeri2.txt contenenti entrambi un elenco di numeri interi. Si scriva una funzione int conta (A) che riceve in ingresso un vettore A a valori interi di dimensione N. La funzione restituisce il numero degli elementi di A il cui valore compare sia in numeri1.txt che in numeri2.txt."

    La risoluzione è la seguente;

    Codice PHP:
    #include <fstream.h>
    const int N=10;
    int controlla (int A[N]){
    fstream fg;
    boolean b1=false;
    boolean b2=false;
    int n=0;
    for(
    int i=0i<Ni++){
    f.open(“numeri1.txt”ios::in);
    g.open(“numeri2.txt”ios::in);

    while(
    f>>n1) { if(n1==A[i]) { b1=true;
                                           break; }
    while(
    g>>n2) { if(n2==A[i]) { b2=true;
                                           break; }
    if(
    b1 && b2n++;
    b1=false,
    b2=false;
    f.close();
    g.close();
    }
    return 
    n;

    Non capisco perchè i tipi booleani b1 e b1 debbano essere inizializzati a false nella dichiarazione, e perchè vengono resettati a false alla fine dell'iterazione del for.

    La cosa che però mi sbubbia di più è la condizione:

    Codice PHP:
    if(b1 && b2n++; 
    Che significa? L'operatore AND restituisce TRUE se entrambi gli operandi sono TRUE, e restituisce FALSE altrimenti. Io al posto del mio professore avrei scritto:

    Codice PHP:
    if(b1 && b2 =true || b1 && b2 =falsen++; 
    è la stessa cosa o complico solamente la condizione?

    Grazie in anticipo, spero di essere stato il più chiaro possibile!

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    codice:
    if(b1 && b2 =true || b1 && b2 =false) n++;
    scritta così (anche se = true e = false sono sbagliati al limite usi ==) aumenti il contatore n anche se entrambe sono false cose che non è richiesta dall'esercizio.

    codice:
    if(b1 && b2 ) n++;
    l'operatore && ritorna un booleano e quindi nel caso entrambe siano true (e quindi A[i] sia in entrambi i file) aumenta il contatore..

    Non capisco perchè i tipi booleani b1 e b1 debbano essere inizializzati a false nella dichiarazione, e perchè vengono resettati a false alla fine dell'iterazione del for.
    Perchè i due cicli while settano solo a true nel caso vengano trovati i numeri nei file e non a false nel caso opposto.. quindi ad ogni iterazione del ciclo for DEVONO essere riportati nello stato iniziale.

  3. #3
    Ti ringrazio molto dei tuoi chiarimenti, soprattutto sul perchè b1 e b2 debbano essere inizializzate a false e resettate a false, ragionando un attimo potevo anche trovare la motivazione!

    Ma non ho ancora chiaro come funziona l'istruzione

    Codice PHP:
    if(b1 && b2 n++; 
    Giustamene hai scritto che l'operatore AND ritorna un booleano, e l'if fa una determinata cosa quando una condizione è rispettata cioè quando quello che c'è tra parentesi è vero. Ma quando è che questa condizione è vera?...cioè è vera quando ritorna TRUE? è questo il senso?

    >Vera quando l'operazione logica AND ritorna un valore uguale a TRUE (ovvero nel caso che siano entrambi true)
    >Falsa altrimenti.

    Fammi sapere se ho capito bene, perchè scritta a quel modo, mi vengono dei dubbi: ad esempio non è simile ad una cosa insensata come:

    Codice PHP:
    if(2+4n++; 
    O forse nel caso dell'if con operatore booleano la condizione nelle parentesi è corretta senza un uguale proprio perchè è l'operatore che dice quando la condizione è rispettata o no?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    la condizione nelle parentesi è corretta senza un uguale proprio perchè è l'operatore che dice quando la condizione è rispettata o no?
    esattamente così..

    infatti è corretto pure scrivere così (corretto sintatticamente)

    codice:
    if(b1)
    {
        if(b2)
        {
             n++;
        }
    }
    come vedi la if non ha bisogno per forza di una comparazione se all'interno c'è già un booleano

  5. #5
    come vedi la if non ha bisogno per forza di una comparazione se all'interno c'è già un booleano
    Grazie mille sei stato chiarissimo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.