Программа для нахождения С.Д.Н.Ф. по двум заданным числам - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите перевести код на си с ява вот код:
import java.io.*;
import java.util.*;
 
/*----------------------------------------------------------/
/Программа для нахождения с.д.н.ф. по двум заданным числам. /
/Казарин М.В. гр. 4102 РГР - 2014г. /
/----------------------------------------------------------*/
 
public class Disk
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
try
{
PrintWriter wrt = new PrintWriter(new OutputStreamWriter(new FileOutputStream("result.txt")), true);
System.out.print("Введите N1: ");
int n = in.nextInt();
int[] ar = translate(n);
int[][] br = mat();
System.out.println("С.д.н.ф. для N1: " + sdnf(ar, br) + "\n");
wrt.println("С.д.н.ф. для N1=" + n + ": " + sdnf(ar, br));
 
System.out.print("Введите N2: ");
int n2 = in.nextInt();
int[] ar2 = translate(n2);
System.out.println("С.д.н.ф. для N2: " + sdnf(ar2, br) + "\n");
wrt.println("С.д.н.ф. для N2=" + n2 + ": " + sdnf(ar2, br));
}
catch (Exception e)
{
System.out.println("Ошибка! Вы ввели неверное число.");
}
}
 
/*----------------------------------------------------------/
/ Перевод числа в двоичную систему. /
/----------------------------------------------------------*/
public static int[] translate(int n)
{
int[] a = new int[8];
for (int i = 0; i < 8; i++)
{
a[i] = (n % 2);
n = (n / 2);
}
for (int i = 0; i < 4; i++)
{
int k = a[i];
a[i] = a[7-i];
a[7-i] = k;
}
return a;
}
 
/*----------------------------------------------------------/
/ Таблица истинности (таблица переменных). /
/----------------------------------------------------------*/
public static int[][] mat()
{
int[][] b = new int[8][3];
b[0][0] = 0;
b[0][1] = 0;
b[0][2] = 0;
for (int i = 1; i < 8; i++)
{
if (b[i-1][2] == 0)
b[i][2] = 1;
else b[i][2] = 0;
}
for (int i = 1; i < 8; i=i+2)
{
if (i!=7)
{
b[i][1] = b[i-1][1];
if (b[i][1] == 0)
b[i+1][1] = 1;
else b[i+1][1] = 0;}
else b[i][1]=b[i-1][1];
}
for (int i = 1; i < 4; i++)
{
b[i][0] = 0;
}
for (int i = 4; i < 8; i++)
{
b[i][0] = 1;
}
return b;
 
}
 
/*----------------------------------------------------------/
/ Нахождение с.д.н.ф. /
/----------------------------------------------------------*/
public static String sdnf(int[] a, int[][] b)
{
String s = "";
String s1 = "(x&";
String nes1 = "(!x&";
String s2 = "y&";
String nes2 = "!y&";
String s3 = "z)";
String nes3 = "!z)";
int k = 0;
for (int i = 0; i < 8; i++)
{
if (a[i] == 1)
{
if (k!=0)
s = s + "v";
if (b[i][0] == 1)
s = s + s1;
else s = s + nes1;
 
if (b[i][1] == 1)
s = s +s2;
else s = s + nes2;
 
if (b[i][2] == 1)
s = s +s3;
else s = s + nes3;
k++;
}
}
return s;
}
}

Решение задачи: «Программа для нахождения С.Д.Н.Ф. по двум заданным числам»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
#define STR_LEN   128
 
int* translate(int);
int** mat(void);
char* sdnf(int*,int**);
 
int main(void)
{
    int n, *ar, **br, n2, *ar2;
    FILE *wrt = fopen("result.txt", "w");
    if(!wrt) return -1;
    setlocale(LC_ALL, "ru");
    
    printf("Введите N1: ");
    scanf("%d", &n);
    ar = translate(n);
    br = mat();
    printf("С.д.н.ф для N1: %s\n", sdnf(ar, br));
    fprintf(wrt, "С.д.н.ф для N1=%d: %s\n", n, sdnf(ar, br));
    
    printf("Введите N2: ");
    scanf("%d", &n2);
    ar2 = translate(n2);
    printf("С.д.н.ф для N2: %s\n", sdnf(ar2, br));
    fprintf(wrt, "С.д.н.ф для N2=%d: %s\n", n2, sdnf(ar2, br));
}
 
int* translate(int n)
{
    int *a = malloc(sizeof(int) * 8), k;
 
    for(int i = 0; i < 8; ++i)
    {
        a[i] = n % 2;
        n /= 2;
    }
    for(int i = 0; i < 4; ++i)
    {
        k = a[i];
        a[i] = a[7-i];
        a[7-i] = k;
    }
    return a;
}
 
int** mat(void)
{
    int **b = malloc(sizeof(int*) * 8);
 
    for(int i = 0; i < 8; ++i)
        b[i] = malloc(sizeof(int) * 3);
    
    b[0][0] = b[0][1] = b[0][2] = 0;
 
    for(int i = 1; i < 8; ++i)
        if(b[i-1][2] == 0)
            b[i][2] = 1;
        else b[i][2] = 0;
    
    for(int i = 1; i < 8; i += 2)
    {
        if(i != 7)
        {
            b[i][1] = b[i-1][1];
            if(b[i][1] == 0)
                b[i+1][1] = 1;
            else b[i+1][1] = 0;
        }
        else b[i][1] = b[i-1][1];
    }
 
    for(int i = 4; i < 8; ++i)
        b[i][0] = 1;
 
    return b;
}
 
char* sdnf(int *a, int **b)
{
    int k = 0;
    char *s = malloc(STR_LEN);
    char s1[]   = "(x&";
    char nes1[] = "(!x&";
    char s2[]   = "y&";
    char nes2[] = "!y&";
    char s3[]   = "z)";
    char nes3[] = "!z)";
 
    s[0] = '\0';
 
    for(int i = 0; i < 8; ++i)
    {
        if(a[i] == 1)
        {
            if(k != 0)
                strcat(s, "v");
            if(b[i][0] == 1)
                strcat(s, s1);
            else strcat(s, nes1);
 
            if(b[i][1] == 1)
                strcat(s, s2);
            else strcat(s, nes2);
 
            if(b[i][2] == 1)
                strcat(s, s3);
            else strcat(s, nes3);
            k++;
        }
    }
    return s; 
}

Объяснение кода листинга программы

  1. Входные данные: n - число для которого необходимо найти С.Д.Н.Ф., ar, br - массивы для хранения полученных результатов.
  2. Выполняется функция translate(n), которая принимает число n и возвращает его двоичное представление в виде массива a.
  3. Результат функции translate(n) сохраняется в переменной a.
  4. Выполняется цикл, который проходит по всем битам числа a.
  5. Если бит равен 1, то к строке s добавляется соответствующая часть С.Д.Н.Ф.
  6. Выполняется функция mat(), которая возвращает матрицу b, представляющую собой таблицу истинности функций.
  7. Результат функции mat() сохраняется в переменной b.
  8. Выполняется функция sdnf(a, b), которая принимает массив a и матрицу b и возвращает С.Д.Н.Ф. в виде строки s.
  9. Результат функции sdnf(a, b) сохраняется в переменной s.
  10. Результат выводится на экран с помощью функции printf().
  11. Открывается файл result.txt для записи результатов.
  12. В цикле запрашивается ввод двух чисел N1 и N2.
  13. Для каждого числа выполняются шаги 2-10.
  14. Результаты выводятся на экран и записываются в файл result.txt.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы