Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2022, 13:50   #1
кирилл345
Новичок
Джуниор
 
Регистрация: 31.10.2022
Сообщений: 2
По умолчанию перекодировка из с++ в си

помогите перекодировать код из c++ в c.в языках не разбираюсь,дали задачу
Код:
#include <iostream>
#include <string>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    string cmdH = "-h";
    string cmdT = "-t";
    string cmdX = "-x";
    string cmdC = "-c";
    string  arg;
 
    if (argc == 1) {
        cout << "Лабораторная работа №1 \n";
        cout << "1.При вводе 'h' программа выдаст подробную справку с функционалом программы,если вдруг возникли какие-то проблемы.\n";
        cout << "2.При вводе 't' программа выдаст в табличном виде размеры всех простых типов языка C/C++.\n";
        cout << "3.При вводе 'x' программа выдаст шестнадцатиричное значение заданного числа. \n";
        cout << "4.При вводе 'c' программа выдаст 3 строки,где нужно ввести 2 числа и арифметическое действие. \n";
    }
    else {
        string cmd = argv[1];
        if (argc >= 2) arg = argv[1]; if ((arg == "--help" || arg == "-h") && argc == 2) {
            if (cmd == cmdH) {
                cout << "1.При вводе 't' программа выдаст в табличном виде размеры всех простых типов языка C/C++.\n";
                cout << "2.При вводе 'x' программа выдаст шестнадцатиричное значение заданного числа. \n";
                cout << "3.При вводе 'c' программа выдаст 3 строки,где нужно ввести первое число-арифметическое действие-второе число. \n";
            }
        }
        else if (arg == "--table" || arg == "-t") {
            cout << "bool:\t\t" << sizeof(bool) << " bytes" << endl;
            cout << "char:\t\t" << sizeof(char) << " bytes" << endl;
            cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << endl;
            cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << endl;
            cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << endl;
            cout << "short:\t\t" << sizeof(short) << " bytes" << endl;
            cout << "int:\t\t" << sizeof(int) << " bytes" << endl;
            cout << "long:\t\t" << sizeof(long) << " bytes" << endl;
            cout << "long long:\t" << sizeof(long long) << " bytes" << endl;
            cout << "float:\t\t" << sizeof(float) << " bytes" << endl;
            cout << "double:\t\t" << sizeof(double) << " bytes" << endl;
            cout << "long double:\t" << sizeof(long double) << " bytes" << endl;
        }
        else if (arg == "--hex" || arg == "-x") {
            cout << " Результат: ";
            cout << hex << atoi(argv[2]) << dec << endl;
        }
        
        else if (arg == "--calc" || arg == "-c") {
        int a = atoi(argv[2]);
        int b = atoi(argv[4]);
        char oper = argv[3][0];
            if (oper == '+')
                cout << dec << "Результат сложения: " << a + b << endl;
            else if (oper == '-') 
                cout << dec << "Результат вычитания: " << a - b << endl;
            else if (oper == '*') 
                cout << dec << "Результат умножения: " << a * b << endl;
            else if (oper == '/') 
                cout << dec << "Результат деления: " << a / b << endl;
            else if ((oper != '/') && (oper != '*') && (oper != '+') && (oper != '-')) {
                cout << "Что-то пошло не так... Попробуйте снова. .\n";
            }
        }
        else {
            cout << "ОШИБКА! Воспользуйтесь справкой,для этого введите h. \n";
        }
 
    }
    system("pause");
    return 0;
}
кирилл345 вне форума Ответить с цитированием
Старый 01.11.2022, 02:19   #2
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

кирилл345, попробуйте так:
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>

#define CMD_H "-h"
#define CMD_T "-t"
#define CMD_X "-x"
#define CMD_C "-c"

int main(int argc, char* argv[])
{
    const char* cmd;
    const char* arg;
    int a, b;
    char oper;

    setlocale(LC_ALL, "Russian");

    if (argc == 1) {
        puts("Лабораторная работа №1 ");
        puts("1.При вводе 'h' программа выдаст подробную справку с функционалом программы,если вдруг возникли какие-то проблемы.");
        puts("2.При вводе 't' программа выдаст в табличном виде размеры всех простых типов языка C/C++.");
        puts("3.При вводе 'x' программа выдаст шестнадцатиричное значение заданного числа. ");
        puts("4.При вводе 'c' программа выдаст 3 строки,где нужно ввести 2 числа и арифметическое действие. ");
    }
    else {
        cmd = argv[1];
        arg = "";
        if (argc >= 2) arg = argv[1];
        if ((strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) && argc == 2) {
            if (strcmp(cmd, CMD_H) == 0) {
                puts("1.При вводе 't' программа выдаст в табличном виде размеры всех простых типов языка C/C++.");
                puts("2.При вводе 'x' программа выдаст шестнадцатиричное значение заданного числа. ");
                puts("3.При вводе 'c' программа выдаст 3 строки,где нужно ввести первое число-арифметическое действие-второе число. ");
            }
        }
        else if (strcmp(arg, "--table") == 0 || strcmp(arg, "-t") == 0) {
            printf("bool:\t\t%i bytes\n", (int)sizeof(bool));
            printf("char:\t\t%i bytes\n", (int)sizeof(char));
            printf("wchar_t:\t%i bytes\n", (int)sizeof(wchar_t));
            /* printf("char16_t:\t%i bytes\n", (int)sizeof(char16_t)); */
            /* printf("char32_t:\t%i bytes\n", (int)sizeof(char32_t)); */
            printf("short:\t\t%i bytes\n", (int)sizeof(short));
            printf("int:\t\t%i bytes\n", (int)sizeof(int));
            printf("long:\t\t%i bytes\n", (int)sizeof(long));
            printf("long long:\t%i bytes\n", (int)sizeof(long long));
            printf("float:\t\t%i bytes\n", (int)sizeof(float));
            printf("double:\t\t%i bytes\n", (int)sizeof(double));
            printf("long double:\t%i bytes\n", (int)sizeof(long double));
        }
        else if (strcmp(arg, "--hex") == 0 || strcmp(arg, "-x") == 0) {
            printf(" Результат: %x\n", atoi(argv[2]));
        }
        else if (strcmp(arg, "--calc") == 0 || strcmp(arg, "-c") == 0) {
            a = atoi(argv[2]);
            b = atoi(argv[4]);
            oper = argv[3][0];
            if (oper == '+')
                printf("Результат сложения: %i\n", a + b);
            else if (oper == '-')
                printf("Результат вычитания: %i\n", a - b);
            else if (oper == '*')
                printf("Результат умножения: %i\n", a * b);
            else if (oper == '/')
                printf("Результат деления: %i\n", a / b);
            else if ((oper != '/') && (oper != '*') && (oper != '+') && (oper != '-')) {
                puts("Что-то пошло не так... Попробуйте снова. .");
            }
        }
        else {
            puts("ОШИБКА! Воспользуйтесь справкой,для этого введите h. ");
        }
    }
    system("pause");
    return 0;
}
1. Переменные cmd и arg дублируют друг друга, и там и там argv[1]. Достаточно одной переменной.
2. Для новых компиляторов можно писать printf %zu:
Код:
printf("bool:\t\t%zu bytes\n", sizeof(bool)); /* значение типа size_t */
Актуально для 64-битных платформ, где тип int -- 32-битный, а тип size_t -- 64-битный.
3. sizeof(char) = 1, по определению языка C, это не надо выводить.
4. Насколько я знаю, в языке C нет типов char16_t, char32_t.
5. printf %x выводит беззнаковые числа. Поэтому -1 будет выведено как «ffffffff».
6. У меня не работает умножение. Видимо знак * используется особым образом, и для умножения надо использовать другой знак.
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wav перекодировка BARNEY Мультимедиа в Delphi 5 12.04.2013 18:39
Перекодировка galik Помощь студентам 2 22.10.2011 01:00
перекодировка Александр 81 Помощь студентам 0 12.12.2010 16:54