Hola amigos, necesito su ayuda para pasar este codigo de c del metodo quine macluskey que me encontre en la red pasarlo a visual basic, yo ya echo un avance pero como no tengo muchos conocimientos de la programacion en visual creo que tiene errores. asi que espero me puedan decir que tiene mal para hacer que funcione gracias y se agradecen sus respuestas.
codigo en c:
Esto es lo que he realizado yo en visual:
Espero y me puedan ayudar.
codigo en c:
Código [Seleccionar]
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
long M[50][9],q,e,pm,x,n,v,r,c,i,j,k,vc,c1=0,VM[50];
long temp,ch,MN[50][9],t=0,M1[70][9],w=0,M2[70][9];
long w2=0,M3[70][9],w3=0,con=0,w4=0,M4[70][9],M5[70][9],w5=0;
void marco (int x1,int y1,int x2,int y2);
int main()
{
clrscr();
textcolor(YELLOW);
marco (23,3,52,5);
gotoxy(26,4);
cout<<"Metodo de Quine-McClusky";
marco (8,6,72,14);
gotoxy(24,8);
cout<<"Digite el numero de variables..";
cin>>v;
gotoxy(24,10);
cout<<"Cuantos valores ingresara..";
cin>>n;
clrscr();
for(i=0;i<n;i++)
{
clrscr();
marco (23,3,52,5);
gotoxy(26,4);
cout<<"Metodo de Quine-McClusky";
marco (8,6,72,14);
gotoxy(20,10);
cout<<"Digite el valor..";
cin>>x;
vc=(v-1);
c1=0;
for(j=0;j<v;j++)
{
c=fmod(x,2);
r=x/2;
x=r;
M[i][vc]=c;
vc=vc-1;
if(c==1)
c1+=1;
}
if(c1==0 || c1!=0)
{VM[i]=c1;
}
}
for(i=0;i<n-1;i++)
{
for(k=i+1;k<n;k++)
{ //ordena la matriz por cantidad de 1
if(VM[k]<VM[i])
{ temp=VM[i];
VM[i]=VM[k];
VM[k]=temp;
for(j=0;j<v;j++)
{
temp=M[i][j];
M[i][j]=M[k][j];
M[k][j]=temp;
}
}
}
}
clrscr();
for(i=0;i<n;i++)
{
for(k=i+1;k<n;k++)
{ch=0;
for(j=0;j<v;j++)
{
if(M[i][j]!=M[k][j])
{
ch+=1;
pm=j;
}
}
if(ch==1)
{
M[i][8]=5; //marca de los valores que cambian
M[k][8]=5;
for(j=0;j<v;j++)
{
M1[w][j]=M[k][j];
M1[w][pm]=5; //asigancion en nueva matriz
}
w+=1;
}
}
}
for(i=0;i<n;i++)
{
if(M[i][8]!=5)
{
for(j=0;j<v;j++)
{ //guarda valores que no cambian de los n entrantes
MN[t][j]=M[i][j];
}
t+=1;
}
}
//------------------------------------
for(i=0;i<w;i++)
{
for(k=i+1;k<w;k++)
{ch=0;
for(j=0;j<v;j++)
{
if(M1[i][j]!=M1[k][j])
{
ch+=1;
pm=j;
}
}
if(ch==1)
{
M1[i][8]=5; //marca de los valores que cambian
M1[k][8]=5;
for(j=0;j<v;j++)
{
M2[w2][j]=M1[k][j];
M2[w2][pm]=5; //asigna a matriz 2
}
w2+=1;
}
}
}
for(i=0;i<w;i++)
{
if(M1[i][8]!=5)
{
for(j=0;j<v;j++)
{
MN[t][j]=M1[i][j]; //guarda los que no cambian de m1
}
t+=1;
}
}
//---------------------------
for(i=0;i<w2;i++)
{
for(k=i+1;k<w2;k++)
{ch=0;
for(j=0;j<v;j++)
{ if(M2[i][j]!=M2[k][j])
ch=1;
}
if(ch==0)
{pm=k;
con=con+1;
//
for(q=k;q<w2;q++) //mando los repetidos al fondo
{ //y restrinjo las filas de la matriz
for(j=0;j<v;j++)
{
temp=M2[q][j];
M2[q][j]=M2[q+1][j];
M2[q+1][j]=temp;
}
}
//
}
}
}
//-------------------------------------------------
for(i=0;i<w2-con;i++)
{
for(k=i+1;k<w2-con;k++)
{ch=0;
for(j=0;j<v;j++)
{
if(M2[i][j]!=M2[k][j])
{
ch+=1;
pm=j;
}
}
if(ch==1)
{
M2[i][8]=5; //marca de los valores que cambian
M2[k][8]=5;
for(j=0;j<v;j++)
{
M3[w3][j]=M2[k][j];
M3[w3][pm]=5; //asigna a matriz 3
}
w3+=1;
}
}
}
for(i=0;i<w2-con;i++)
{
if(M2[i][8]!=5)
{
for(j=0;j<v;j++)
{
MN[t][j]=M2[i][j]; //guarda los que no cambian de M2
}
t+=1;
}
}
///-------------------------------------------------------
con=0;
for(i=0;i<w3;i++)
{
for(k=i+1;k<w3-con;k++)
{ch=0;
for(j=0;j<v;j++)
{ if(M3[i][j]!=M3[k][j])
ch=1;
}
if(ch==0)
{pm=k;
con=con+1;
//
for(q=k;q<w3;q++) //mando los repetidos al fondo
{ //y restrinjo las filas de la matriz
for(j=0;j<v;j++)
{
temp=M3[q][j];
M3[q][j]=M3[q+1][j];
M3[q+1][j]=temp;
}
}
//
k=k-1;
}
}
}
for(i=0;i<w3-con;i++)
{
for(k=i+1;k<w3-con;k++)
{ch=0;
for(j=0;j<v;j++)
{
if(M3[i][j]!=M3[k][j])
{
ch+=1;
pm=j;
}
}
if(ch==1)
{
M3[i][8]=5; //marca de los valores que cambian
M3[k][8]=5;
for(j=0;j<v;j++)
{
M4[w4][j]=M3[k][j];
M4[w4][pm]=5; //asigna a matriz 4
}
w4+=1;
}
}
}
for(i=0;i<w3-con;i++)
{
if(M3[i][8]!=5)
{
for(j=0;j<v;j++)
{
MN[t][j]=M3[i][j]; //guarda los que no cambian de M3
}
t+=1;
}
}
//------------------------------------------
con=0;
for(i=0;i<w4;i++)
{
for(k=i+1;k<w4-con;k++)
{ch=0;
for(j=0;j<v;j++)
{ if(M4[i][j]!=M4[k][j])
ch=1;
}
if(ch==0)
{pm=k;
con=con+1;
//
for(q=k;q<w4;q++) //mando los repetidos al fondo
{ //y restrinjo las filas de la matriz
for(j=0;j<v;j++)
{
temp=M4[q][j];
M4[q][j]=M4[q+1][j];
M4[q+1][j]=temp;
}
}
//
k=k-1;
}
}
}
for(i=0;i<w4-con;i++)
{
for(k=i+1;k<w4-con;k++)
{ch=0;
for(j=0;j<v;j++)
{
if(M4[i][j]!=M4[k][j])
{
ch+=1;
pm=j;
}
}
if(ch==1)
{
M4[i][8]=5; //marca de los valores que cambian
M4[k][8]=5;
for(j=0;j<v;j++)
{
M5[w5][j]=M4[k][j];
M5[w5][pm]=5; //asigna a matriz 4
}
w5+=1;
}
}
}
for(i=0;i<w4-con;i++)
{
if(M4[i][8]!=5)
{
for(j=0;j<v;j++)
{
MN[t][j]=M4[i][j]; //guarda los que no cambian de M4
}
t+=1;
}
}
//----------------------------------------------
clrscr();
marco (18,9,59,12);
gotoxy(20,10);
cout<<"Las letras minusculas son la negacion";
gotoxy(20,11);
cout<<"y las mayusculas las no negadas";
getch();
clrscr();
marco (6,2,70,25);
for(i=0;i<t;i++)
{
for(j=0;j<v;j++)
{
if(j==0) { if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"a";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"a";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"a";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"A";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"A";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"A";
}
}
}
if(j==1) {if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"b";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"b";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"b";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"B";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"B";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"B";
}
}
}
if(j==2) {if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"c";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"c";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"c";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"C";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"C";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"C";
}
}
}
if(j==3) {if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"d";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"d";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"d";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"D";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"D";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"D";
}
}
}
if(j==4) {if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"e";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"e";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"e";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"E";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"E";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"E";
}
}
}
if(j==5) {if(MN[i][j]==0)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"f";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"f";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"f";
}
}
if(MN[i][j]==1)
{ if(i<22)
{
gotoxy(20+j,3+i);
cout<<"F";
}
if(i>=22&& i<44)
{gotoxy(28+j,i-19);
cout<<"F";
}
if(i>=44)
{gotoxy(36+j,i-41);
cout<<"F";
}
}
}
}
}
getch();
}
Esto es lo que he realizado yo en visual:
Código [Seleccionar]
Dim M(50, 9), q, e, pm, x, n, v, r, c, i, j, k, vc, c1, VM(50) As Long
Dim temp, ch, MN(50, 9), t, M1(70, 9), w, M2(70, 9) As Long
Dim w2, M3(70, 9), w3, con, w4, M4(70, 9), M5(70, 9), w5 As Long
Private Sub Command1_Click()
c1 = 0
t = 0
w = 0
w2 = 0
w3 = 0
w4 = 0
w5 = 0
con = 0
Do
v = InputBox("Cuantas variables quieres: ", "Numeros a repetir", 0) 'Capturar los numeros
n = InputBox("Cuantos elementos va a tener: ", "Numeros a repetir", 0) 'Capturar los numeros
If Trim$(n) = "" Then Exit Sub ' si presionamos cancelar salir
Loop Until IsNumeric(n) ' repetir el ciclo mientras lo que se ingresa no sea un numero
For i = 1 To n ' de 1 a n
x = InputBox("Digite el valor..", "Valor " & i & " de " & n, 0) 'Capturar los numeros
Show
Print "valor (" & i & "):" & x ' si lo quieres mostrar en el Form
MsgBox "El valor de x es: " & x ' si lo quieres mostrar en un mensaje
vc = (v - 1)
c1 = 0
For j = 1 To v
c = x Mod 2
r = x / 2
x = r
M(i, vc) = c
vc = vc - 1
If c = 1 Then
c1 = c1 + 1
End If
If c1 = 0 Then
VM(i) = c1
End If
Next
Next
For i = 1 To n - 1
For k = i + 1 To k < n
'//ordena la matriz por cantidad de 1
If VM(k) < VM(i) Then
temp = VM(i)
VM(i) = VM(k)
VM(k) = temp
For j = 0 To j < v
temp = M(i, j)
M(i, j) = M(k, j)
M(k, j) = temp
Next
End If
Next
Next
For i = 0 To i < n
For k = i + 1 To k < n
ch = 0
For j = 0 To j < v
If M(i, j) <> M(k, j) Then
ch = ch + 1
pm = j
End If
Next
If ch = 1 Then
M(i, 8) = 5 '//marca de los valores que cambian
M(k, 8) = 5
For j = 0 To j < v
M1(w, j) = M(k, j)
M1(w, pm) = 5 '//asigancion en nueva matriz
Next
w = w + 1
End If
Next
Next
For i = 0 To i < n
If M(i, 8) <> 5 Then
For j = 0 To j < v
'//guarda valores que no cambian de los n entrantes
MN(t, j) = M(i, j)
Next
t = t + 1
End If
Next
For i = 0 To i < w
For k = i + 1 To k < w
ch = 0
For j = 0 To j < v
If M1(i, j) <> M1(k, j) Then
ch = ch + 1
pm = j
End If
Next
If ch = 1 Then
M1(i, 8) = 5 '//marca de los valores que cambian
M1(k, 8) = 5
For j = 0 To j < v
M2(w2, j) = M1(k, j)
M2(w2, pm) = 5 '//asigna a matriz 2
Next
w2 = w2 + 1
End If
Next
Next
For i = 0 To i < w
If M1(i, 8) <> 5 Then
For j = 0 To j < v
MN(t, j) = M1(i, j) '//guarda los que no cambian de m1
Next
t = t + 1
End If
Next
For i = 0 To i < w2
For k = i + 1 To k < w2
ch = 0
For j = 0 To j < v
If M2(i, j) <> M2(k, j) Then
ch = 1
End If
Next
If ch = 0 Then
pm = k
con = con + 1
For q = k To q < w2 '//mando los repetidos al fondo
'//y restrinjo las filas de la matriz
For j = 0 To j < v
temp = M2(q, j)
M2(q, j) = M2(q + 1, j)
M2(q + 1, j) = temp
Next
Next
End If
Next
Next
For i = 0 To i < w2 - con
For k = i + 1 To k < w2 - con
ch = 0
For j = 0 To j < v
If M2(i, j) <> M2(k, j) Then
ch = ch + 1
pm = j
End If
Next
If ch = 1 Then
M2(i, 8) = 5 '//marca de los valores que cambian
M2(k, 8) = 5
For j = 0 To j < v
M3(w3, j) = M2(k, j)
M3(w3, pm) = 5 '//asigna a matriz 3
Next
w3 = w3 + 1
End If
Next
Next
For i = 0 To i < w2 - con
If M2(i, 8) <> 5 Then
For j = 0 To j < v
MN(t, j) = M2(i, j) '//guarda los que no cambian de M2
Next
t = t + 1
End If
Next
con = 0
For i = 0 To i < w3
For k = i + 1 To k < w3 - con
ch = 0
For j = 0 To j < v
If M3(i, j) <> M3(k, j) Then
ch = 1
End If
Next
If ch = 0 Then
pm = k
con = con + 1
For q = k To q < w3 '//mando los repetidos al fondo
'//y restrinjo las filas de la matriz
For j = 0 To j < v
temp = M3(q, j)
M3(q, j) = M3(q + 1, j)
M3(q + 1, j) = temp
Next
Next
End If
k = k - 1
Next
Next
For i = 0 To i < w3 - con
For k = i + 1 To k < w3 - con
ch = 0
For j = 0 To j < v
If M3(i, j) <> M3(k, j) Then
ch = ch + 1
pm = j
End If
Next
If ch = 1 Then
M3(i, 8) = 5 '//marca de los valores que cambian
M3(k, 8) = 5
For j = 0 To j < v
M4(w4, j) = M3(k, j)
M4(w4, pm) = 5 '//asigna a matriz 4
Next
w4 = w4 + 1
End If
Next
Next
For i = 0 To i < w3 - con
If M3(i, 8) <> 5 Then
For j = 0 To j < v
MN(t, j) = M3(i, j) '//guarda los que no cambian de M3
Next
t = t + 1
End If
Next
con = 0
For i = 0 To i < w4
For k = i + 1 To k < w4 - con
ch = 0
For j = 0 To j < v
If M4(i, j) <> M4(k, j) Then
ch = 1
End If
Next
If ch = 0 Then
pm = k
con = con + 1
For q = k To q < w4 '//mando los repetidos al fondo
'//y restrinjo las filas de la matriz
For j = 0 To j < v
temp = M4(q, j)
M4(q, j) = M4(q + 1, j)
M4(q + 1, j) = temp
Next
Next
k = k - 1
End If
Next
Next
For i = 0 To i < w4 - con
For k = i + 1 To k < w4 - con
ch = 0
For j = 0 To j < v
If M4(i, j) <> M4(k, j) Then
ch = ch + 1
pm = j
End If
Next
If ch = 1 Then
M4(i, 8) = 5 '//marca de los valores que cambian
M4(k, 8) = 5
For j = 0 To j < v
M5(w5, j) = M4(k, j)
M5(w5, pm) = 5 '//asigna a matriz 4
Next
w5 = w5 + 1
End If
Next
Next
For i = 0 To i < w4 - con
If M4(i, 8) <> 5 Then
For j = 0 To j < v
MN(t, j) = M4(i, j) '//guarda los que no cambian de M4
Next
t = t + 1
End If
Next
'cout<<"Las letras minusculas son la negacion";
'cout<<"y las mayusculas las no negadas";
For i = 0 To i < t
For j = 0 To j < v
If j = 0 Then
If MN(i, j) = 0 Then
If i < 22 Then
Text1.Text = "A"
MsgBox "A'"
'cout<<"a";
End If
If i >= 22 & i < 44 Then
Text1.Text = "A'"
'cout<<"a";
End If
If i >= 44 Then
Text1.Text = "A'"
'cout<<"a";
End If
End If
If MN(i, j) = 1 Then
If i < 22 Then
Text1.Text = "A"
'cout<<"A";
End If
If i >= 22 & i < 44 Then
Text1.Text = "A"
'cout<<"A";
End If
If i >= 44 Then
Text1.Text = "A"
'cout<<"A";
End If
End If
End If
If j = 1 Then
If MN(i, j) = 0 Then
If i < 22 Then
Text1.Text = "B'"
'cout<<"b";
End If
If i >= 22 & i < 44 Then
Text1.Text = "B'"
'cout<<"b";
End If
If i >= 44 Then
Text1.Text = "B'"
'cout<<"b";
End If
End If
If MN(i, j) = 1 Then
If i < 22 Then
Text1.Text = "B"
'cout<<"B";
End If
If i >= 22 & i < 44 Then
Text1.Text = "B"
'cout<<"B";
End If
If i >= 44 Then
Text1.Text = "B"
'cout<<"B";
End If
End If
If j = 2 Then
If MN(i, j) = 0 Then
If i < 22 Then
Text1.Text = "C'"
'cout<<"c";
End If
If i >= 22 & i < 44 Then
Show
Print Text1.Text = "c'"
'cout<<"c";
End If
If i >= 44 Then
Text1.Text = "C'"
'cout<<"c";
End If
End If
If MN(i, j) = 1 Then
If i < 22 Then
Text1.Text = "C"
'cout<<"C";
End If
If i >= 22 & i < 44 Then
Text1.Text = "C"
'cout<<"C";
End If
If i >= 44 Then
Text1.Text = "C"
'cout<<"C";
End If
End If
End If
End If
Next
Next
End Sub
Espero y me puedan ayudar.