Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wartości logiczne w C

Ostatnio zmodyfikowano 2012-11-02 01:02
Autor Wiadomość
Rafals
Temat założony przez niniejszego użytkownika
Wartości logiczne w C
» 2012-11-01 23:28:04
Witam.
Dla np sumy logicznej mamy "||".
Czy istnieje takie coś dla implikacji itd?
Czy tylko 3 podstawowe suma, iloczyn i negacja?
P-68135
DejaVu
» 2012-11-01 23:51:35
Jeszcze jest xor i not.
P-68138
Rafals
Temat założony przez niniejszego użytkownika
» 2012-11-02 00:24:02
Pytałem dlatego, że dostaliśmy zadanie z podstaw programowania. Oto treść:

Napisz program wypisujący tablice logiczne poniższych wyrażeń logicznych (jeżeli wyrażenie jest prawdziwe to napisz 1, jeżeli jest fałszywe to wypisz 0):
p||q, p&&q, p->q, p<->q, ~(p&&q)||(r->p)

Moja twórczość:
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void wyrazenia( int p, int q, int r )
{
    int PimpQ, RimpP, ProwQ;
   
    //implikacja p->q
    if( p == 1 && q == 0 )
         PimpQ = 0;
    else
         PimpQ = 1;
   
    //implikacja r->p
    if( p == 1 && q == 0 )
         RimpP = 0;
    else
         RimpP = 1;
   
    //rownowaznosc p<->q
    if( p == 1 && q == 1 || p == 0 && q == 0 )
         ProwQ = 1;
    else
         ProwQ = 0;
   
    printf( "%i | %i | %i |   %i  |   %i  |   %i  |   %i   |         %i\n", p, q, r, p || q, p && q, PimpQ, ProwQ,( ~( p && q ) ) ||( RimpP ) );
}





int main( int argc, char * argv[] )
{
    printf( "p | q | r | p||q | p&&q | p->q | p<->q | ~(p&&q)||(r->p)\n" );
    wyrazenia( 1, 1, 1 );
    wyrazenia( 1, 1, 0 );
    wyrazenia( 1, 0, 1 );
    wyrazenia( 1, 0, 0 );
    wyrazenia( 0, 1, 1 );
    wyrazenia( 0, 1, 0 );
    wyrazenia( 0, 0, 1 );
    wyrazenia( 0, 0, 0 );
    return 0;
}
Oraz pytanie, czy w przypadku wartości logicznych wbić sobie do głowy pisanie true/false oraz zmienne i funkcja typu bool, czy jedynki i zera a typ integer?
Wiem jeszcze, że wartość ma stan false tylko w przypadku "0", a każda inna (ujemne też?) stanu true. W sumie wniosek z ostatniego zdania wyciągnąłbym, że w przypadku wartości logicznych lepiej jest operować na wartościach true/false oraz typach bool.

@Savail Zadanie dobrze wykonane? Czy można to jakoś usprawnić/inaczej napisać kod odpowiedzialny za implikację i równoważność?
P-68141
Savail
» 2012-11-02 00:52:19
Dokładnie. Typ bool zajmuje mniej miejsca niż int a poza tym program staje się czytelniejszy gdy go używasz bo wiesz, że zawsze masz tylko 2 drogi do wyboru: true albo false.
P-68143
DejaVu
» 2012-11-02 00:58:30
Ja bym napisał jeszcze osobne funkcje do implikacji i równoważności :)
C/C++
bool czyImplikuje( bool a, bool b );
bool czyRownowazne( bool a, bool b );
Wówczas komentarze w kodzie są raczej zbędne no i masz narzędzie 'wielokrotnego' użytku :)
P-68144
Rafals
Temat założony przez niniejszego użytkownika
» 2012-11-02 01:02:06
@DeJavu Masz rację, z narzędziem wielokrotnego użytku. Jak najbardziej korzystam z takich rozwiązań, aczkolwiek póki co poklepie trochę ręcznie, aby wbić sobie podstawy itp., itd.
Czyli zadanie dobrze wykonane, ciesze się z mojego sukcesu.
Dziękuję wam za pomoc.
Zamykam.
P-68145
« 1 »
  Strona 1 z 1