Pascal/Turbo Pascal - Ayuda en la creación de una tablad e verdad.

 
Vista:
sin imagen de perfil

Ayuda en la creación de una tablad e verdad.

Publicado por Diego (98 intervenciones) el 07/04/2014 16:46:18
Buen día, tengo un problema en C que dice lo siguiente:

1) Hacer una función o un programa que evalúe el operador "NAND" lógico para todos sus posibles operandos (evaluar todas las combinaciones de la tabla de verdad) usar estructuras de control iterativas.

Nota: No es necesario guardar todos los resultados, con evaluar la expresión alcanza.



-El problema es que no obtuve respuesta alguna en el foro de C, pero si se puede realizar en pascal entonces lo puedo realizar en C.
Lo que se me habia ocurrido es armar y mostrar la tabla de verdad para 2 variables; como la manera en la que yo realizo las tablas de verdad tiene un patrón, lo podría implementar con un for par que mostrase las variables y los posibles casos de verdad funto a sus resultados, pero esto en realidad no evalua las operaciones logicas sino que simple mente imprimiria lo que yo le pedí.

Les agradezco por su paciencia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda en la creación de una tablad e verdad.

Publicado por David (224 intervenciones) el 07/04/2014 17:43:24
En pascal, una forma de hacerlo podría ser la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Uses CRT;
 
Var
  L1,L2:BOOLEAN;
 
Function Nand(logico1:boolean; logico2:boolean):boolean;
 
begin
  case logico1 of
    false : case logico2 of
               false : Nand:=True;
               true  : Nand:=True;
            end;
    true :  case logico2 of
               false : nand:=true;
               true  : nand:=False;
 
            End;
  end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda en la creación de una tablad e verdad.

Publicado por Diego (98 intervenciones) el 07/04/2014 18:48:48
Muchas gracias, yo también pense en la forma de hace un caso de verdad, pero la cuestión es ir variando el valor de verdad en los diferentes casos con una estructura iterativa, ya sea definida o indefinida (for, repeat, while; creo que esas son todas las iterativas de pascal).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda en la creación de una tablad e verdad.

Publicado por David (224 intervenciones) el 07/04/2014 19:27:43
No termino de entender que es exactamente lo que quieres decir. En cualquier caso, siempre tendrás que preguntar por el valor de los operandos, ya sea con un if o un case
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda en la creación de una tablad e verdad.

Publicado por Diego (98 intervenciones) el 07/04/2014 23:42:37
Así es, pero al parecer la creación de la tabla de verdad se debe realizar con una estructura iterativa.
Eso es lo que no puedo hacer,
En cuanto a la compuerta nand, bastaría solamente con saber si es el caso en el cual el valor de verdad es falso sino es ese entonces cualquiera de los otros 3 es verdadero.

En fin, mi problema es que todo esto se tiene que realizar con una estructura iterativa.
osea en un for , while o repeat until, Y no logro ver como variar los valores de verdad de la variables para que al enviarlos a la función sean diferentes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda en la creación de una tablad e verdad.

Publicado por ramon (2158 intervenciones) el 09/04/2014 00:42:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
{A ver si esto te sirve}
 
{programa 1}
 
 program logica_nand;
 uses
    crt;
  var
    k, t, d : byte;
    nand : array[1..4] of byte;
  begin
       d := 0;
       t := 1;
       for k := 0 to 1 do
       begin
       if (d = 0) and (k = 0) then
       nand[t] := 1;
       if (d = 0) and (k = 1) then
       nand[t] := 1;
       t := t + 1;
       end;
       for k := 0 to 1 do
       begin
       d := 1;
       if (d = 1) and (k = 0) then
       nand[t] := 1;
       if (d = 1) and (k = 1) then
       nand[t] := 0;
       t := t + 1;
     end;
      clrscr;
      writeln;
      writeln('Puerta NAND');
      writeln('     A   B   S');
      writeln('   -------------');
      writeln('   | ',0,' | ',0,' | ',nand[1],' |');
      writeln('   | ',0,' | ',1,' | ',nand[2],' |');
      writeln('   | ',1,' | ',0,' | ',nand[3],' |');
      writeln('   | ',1,' | ',1,' | ',nand[4],' |');
      writeln('   -------------');
      readkey;
  end.
 
 {programa 2}
 
  program nand2;
  uses
    crt;
   const
      lonx = 7;
      lony = 15;
      lanand : array[1..lonx] of string[lony] = (
      '0000.....000000',
      '===.00000.00000',
      '000.000000.0000',
      '000.000000.====',
      '000.000000.0000',
      '===.00000.00000',
      '0000.....000000');
   var
     entra : array[1..2] of byte;
     a, b, tecla : char;
     pl, d, l, i : integer;
     salid : byte;
 
   begin
   pl := 1;
   repeat
      clrscr;
      writeln('   Entre Valores Entradas A/B');
      a := 'A';
      d := 1;
    while d < 3 do
    begin
    if d <= 2 then
    begin
      write('   ',a,' : ');
    repeat
      entra[d] := ord(readkey) - 48;
    until entra[d] in[0,1];
    write(entra[d]);
    a := 'B';
    end;
    d := d + 1;
  end;
    gotoxy(28,6);write(entra[1]);
    gotoxy(28,lony - 5);write(entra[2]);
      for l := 1 to lony do
        for i := 1 to lonx do
        begin
        if lanand[i,l] <> '0' then
        begin
        gotoxy(30 + l,4 + i); write(lanand[i,l]);
        end;
     end;
     gotoxy(35,6);write('A');
     gotoxy(35,lony - 5);write('B');
     gotoxy(40,(4 + (lonx div 2)) + 1);write('S');
    case entra[1] of
  0 : case entra[2] of
      0 : salid := 1;
      1 : salid := 1;
      end;
  1 : case entra[2] of
      0 : salid := 1;
      1 : salid := 0;
      end;
    end;
        gotoxy(47,(4 + (lonx div 2)) + 1);write(salid);
      if pl < 4 then
      begin
        gotoxy(20,(4 + (lonx div 2)) + 7);write('Desea Mas Pruevas [S/N]');
      end
   else
      begin
        gotoxy(20,(4 + (lonx div 2)) + 7);write('Pulse Una Tecla');
        readkey;
        break;
      end;
     repeat
        b := upcase(readkey);
     until b in['S','N'];
     if b = 'S' then
     pl := pl + 1;
     if b = 'N' then
     pl := 5;
    until pl > 4;
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar