41

(21 відповідей, залишених у C++)

Знаю функцію itoa, але вона переводить тільки цілі числа

42

(21 відповідей, залишених у C++)

Так. Мають бути символи "0.1"

43

(21 відповідей, залишених у C++)

Як змінну типу double перетворити або записати в масив символів(статичний чи динамічний не має значення)? Я чув про оператор reinterpret_cast, але я не знаю як він працює і чи взагалі його можна використовувати в моєму випадку. Підкажіть хто знає як вирішити цю проблему.

44

(25 відповідей, залишених у C++)

Так, це була елементарна помилка. Введення працює добре, але коли переходиш в пункт 1 мого меню(там функція Show) програма всеодно припиняє роботу(вилітає).

void Show(Factory* first)
{
    Factory* tmp = first->next;
    while (tmp != NULL)
    {        
        cout << "\n" << tmp->name;
        cout << "\n" << tmp->ownership;
        cout << "\n" << tmp->area;
        cout << "\n" << tmp->workers;
        tmp = tmp->next;        
    }
    _getch();
}

45

(25 відповідей, залишених у C++)

Я на даний момент не бачу сенсу продовжувати цю дводенну дискусію. Мою проблему ігнорять і я так бачу що всім байдуже. Дам пораду на майбутнє: якщо ви пане koala та інші не маєте найменшого бажання допомогти користувачу який звернувся на ваш форум за допомогою, то скажіть йому про це зразу, а не витрачайте свій а тим більше його час деремно. А зараз рекомендую заморозити цю тему (так само як ви робите це завжди). Всім дякую за допомогу.

46

(25 відповідей, залишених у C++)

Я ж кажу, функція перевірки працює ідеально і я не бачу сенсу її змінювати.

47

(25 відповідей, залишених у C++)

Ну я звісно можу перевести ці рядки в double за допомогою функції atof але нащо мені це?

48

(25 відповідей, залишених у C++)

Функція MyAudit працює ідеально, я не бачу сенсу її переробляти. А щодо Workers  і Area то це число працівників і площа землі відповідно. Вони вводяться користувачем як цифри але обробляються в коді як рядки символів, а функція MyAudit дозволяє мені виключити усі помилки при введенні. Якби ці два поля мали б тип даних int або double то користувач ввівши замість цифри символ спричинив би краш програми(я так гадаю). А коли це масив символів то користувач вводить що завгодно, а помилки я перевіряю і змушую користувача вводити рядок до тих пір доки він не введе правильно.

49

(25 відповідей, залишених у C++)

Гаразд. Я затру все що пов'язано з С. Заміню структуру на клас. Але звичайний сішний рядок символів я на string міняти не буду тому що тоді доведеться змінювати мою функцію перевірки(MyAudit) і крім того ми по програмі до контейнерів не дійшли так що нам їх поки що заборонено використовувати. Але як не крути, а проблема з реалізацією черги залишається.

50

(25 відповідей, залишених у C++)

Я хочу використовувати сout i cin а для цього якщо я не помиляюся потрібна бібліотека <iostream>. А щодо помилки, то програма компілиться нормально але під час роботи вилітає(заторможує і пише що вікно програми не відповідає)

51

(25 відповідей, залишених у C++)

Допоможіть мені будь-ласка. Я не знаю чому моя програма вилітає коли я нажимаю пункт 1 у своєму меню. Функція Show має виводити мені дані об'єктів. Швидше за все я неправильно звертаюся до елементів черги і через це програма вилітає.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<conio.h>
#include<cctype>
#include<stdlib.h>
#include<cstring>
#include<fstream>
#include<iomanip>
#include<type_traits>
#include<Windows.h>
#include<stdio.h>
#include<string.h>
using namespace std;
struct Factory
{
    char name[50];
    char ownership[50];
    char area[50];
    char workers[50];
    Factory* next;
};
bool MyAudit(const char* string)
{
    const char* temp = "0123456789-+.";
    unsigned int number = 0;

    for (int i = 0; i < strlen(string); i++)   //strlen(string) -- функція що повертає розмір рядка 'string'
    {
        if ((i > 0) && (string[i] == '+' || string[i] == '-')) //шукаємо '+' або '-' в рядку 'string'
        {
            return false;
        }
        if (string[i] == '.') //шукаємо крапку 
        {
            number++;
            if (number > 1) //перевіряємо чи не більше однієї крапки в рядку
            {
                return false;
            }
        }
        if (strchr(temp, string[i]) == 0) //ми перевіряємо наш рядок 'string' на цифри і на "+-."
        {
            return false;
        }
    }
    return true;
}
int IsEmpty(Factory** first) //перевірка пустоти черги
{
    if (first == NULL)
    {
        return 1;
    }        
    else
    {
        return 0;
    }
        
}
void AddNew(Factory** last, Factory** first)
{    
    if (first = NULL)
    {
        *first = new(Factory);
        last = first;       
        cout << "Enter the factory name: ";
        cin >> (*first)->name;
        cout << "The types of property: N - national, P - private, C - cooperative";
        cout << "\nEnter the type of property: ";
        cin >> (*first)->ownership;
        cout << "Enter the area of land(hectares): ";
        cin >> (*first)->area;
        while (MyAudit((*first)->area) != true)
        {
            cout << "\nError! Enter a correct value: ";
            cin >> (*first)->area;
        }
        cout << "Enter the number of workers: ";
        cin >> (*first)->workers;
        while (MyAudit((*first)->workers) != true)
        {
            cout << "\nError! Enter a correct value: ";
            cin >> (*first)->workers;
        }
        (*first)->next = 0;
    }
    else
    {        
        Factory* temp = new(Factory);
        temp->next = 0;
        cout << "Enter the factory name: ";
        cin >> temp->name;
        cout << "The types of property: N - national, P - private, C - cooperative";
        cout << "\nEnter the type of property: ";
        cin >> temp->ownership;
        cout << "Enter the area of land(hectares): ";
        cin >> temp->area;
        while (MyAudit(temp->area) != true)
        {
            cout << "\nError! Enter a correct value: ";
            cin >> temp->area;
        }
        cout << "Enter the number of workers: ";
        cin >> temp->workers;
        while (MyAudit(temp->workers) != true)
        {
            cout << "\nError! Enter a correct value: ";
            cin >> temp->workers;
        }       
        (*last) = temp;
    }
}
void Show(Factory* first)
{
    Factory* tmp = first->next;
    while (tmp != NULL)
    {        
        cout << "\n" << tmp->name;
        cout << "\n" << tmp->ownership;
        cout << "\n" << tmp->area;
        cout << "\n" << tmp->workers;
        tmp = tmp->next;        
    }    
    _getch();
}
void main()
{
    Factory* first = NULL;
    Factory* last = NULL;   
    int size = 0;
    bool index = false;
    while (index != true)
    {
        cout << "\t Menu: \n";
        cout << "1.View the list of factorys\n";
        cout << "2.Add a new factory\n";
        cout << "3.Exit\n";
        cout << "---------------\n";
        cout << "Enter the number" << endl;
        int menu;
        cin >> menu;
        system("cls");
        switch (menu)
        {
        case 1:
        {
            if (IsEmpty(&first) == 1)
            {
               cout << "Database is empty";
            }                
            else
            {                
                Show(first);                
            }            
            system("cls");
            break;
        }
        case 2:
        {
            AddNew(&last, &first);
            size++;
            system("cls");
            break;
        }
        case 3:
        {
            index = true;
            break;
        }
        default:
        {
            cout << "A non-existent menu item is selected\n";
        }
        }
    }
}

52

(25 відповідей, залишених у C++)

Я не знаю як за допомогою них можна почергово звернутися до кожного елемента черги

53

(25 відповідей, залишених у C++)

Щодо мови то це С, в завданні написано робити тільки за допомогою структур(ніяких класів чи контейнерів). А щодо введення і виведення то я просто не зовсім розумію як використовувати вказівники (dali, first, element)

54

(25 відповідей, залишених у C++)

Не зрозумів про мову. Мова коду англійська, є коментарі українською якщо тебе це цікавить

55

(25 відповідей, залишених у C++)

В мене є реалізація цієї бази даних за допомогою масиву структур але потрібно зробити її через чергу

Допоможіть мені створити базу даних за допомогою черги використовуючи структуру(через контейнер <queue> не можна). Проблема полягає в тому що я не можу реалізувати введення даних і їх виведення, бо не знаю як звернутися до кожного елемента окремо. Я не знаю чи мій код працює правильно оскільки не можу перевірити виведення даних.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<math.h>
#include<conio.h>
#include<cctype>
#include<stdlib.h>
#include<cstring>
#include<fstream>
#include<iomanip>
#include<type_traits>
#include<Windows.h>
#include<stdio.h>
#include<string.h>
using namespace std;
struct Factory
{
    char name[50];
    char ownership[50];
    char area[50];
    char workers[50];
    Factory* dali;
};
Factory* first, * element;
void AddNew(Factory* first);
void Show(Factory* first);
bool MyAudit(const char* string)
{
    const char* temp = "0123456789-+.";
    unsigned int number = 0;

    for (int i = 0; i < strlen(string); i++)   //strlen(string) -- функція що повертає розмір рядка 'string'
    {
        if ((i > 0) && (string[i] == '+' || string[i] == '-')) //шукаємо '+' або '-' в рядку 'string'
        {
            return false;
        }
        if (string[i] == '.') //шукаємо крапку 
        {
            number++;
            if (number > 1) //перевіряємо чи не більше однієї крапки в рядку
            {
                return false;
            }
        }
        if (strchr(temp, string[i]) == 0) //ми перевіряємо наш рядок 'string' на цифри і на "+-."
        {
            return false;
        }
    }
    return true;
}
void main()
{
    first = NULL;
    int size = 0;
    bool index = false;
    while (index != true)
    {
        cout << "\t Menu: \n";
        cout << "1.View the list of factorys\n";
        cout << "2.Add a new factory\n";
        cout << "3.Exit\n";
        cout << "---------------\n";
        cout << "Enter the number" << endl;
        int menu;
        cin >> menu;
        system("cls");
        switch (menu)
        {
        case 1:
        {
            Show(first);
            system("cls");
            break;
        }
        case 2:
        {
            AddNew(first);
            system("cls");
            break;
        }
        case 3:
        {
            index = true;
            break;
        }
        default:
        {
            cout << "A non-existent menu item is selected\n";
        }
        }
    }
}
void AddNew(Factory* first)
{
    char a[50];
    char b[50];
    char c[50];
    char d[50];
    cout << "Enter the factory name: ";
    cin >> a;
    cout << "The types of property: N - national, P - private, C - cooperative";
    cout << "\nEnter the type of property: ";
    cin >> b;
    cout << "Enter the area of land(hectares): ";
    cin >> c;
    while (MyAudit(c) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin >> c;
    }
    cout << "Enter the number of workers: ";
    cin >> d;
    while (MyAudit(d) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin >> d;
    }
    element = new(Factory);
    element->dali = first;
    first = element;
    strcpy(element->name, a);
    strcpy(element->ownership, b);
    strcpy(element->area, c);
    strcpy(element->workers, d);
}
void Show(Factory* first)
{ 
}

Моя програма нарешті працює так як треба. Дякую за допомогу.

І зміювати я код вже не можу, бо на це в мене немає часу. Останнє що мені потрібно вирішити це як зачистити ці рядки

Я щойно тільки почав вчити структури і користуватися std::vektor i std::string в даному завданні я на жаль не можу.

Допоможіть зачистити рядок двовимірного динамічного масиву символів який знахходиться в структурі. В даному випадку це

a.name[i]

та інші. Функція Sort має сортувати мою структуру за

а.area[i]

яке вводиться числом. Функція AddNew додає елементи(я її вставив для повноти картини). Як видно в коді я написав

a.name[i] = "";

але мені вибиває помилку.


struct Factory
{
    char** name;
    char** ownership;
    char** area;
    char** workers;
};
void Sort(int size, Factory& a)
{
    if (size > 1)
    {
        for (int i = 0; i < size - 1; i++)
        {
            if (atof(a.area[i]) > atof(a.area[i + 1]))
            {
                char* temp1 = new char[50];
                char* temp2 = new char[50];
                char* temp3 = new char[50];
                char* temp4 = new char[50];
                strcpy(temp1, a.name[i]);
                strcpy(temp2, a.ownership[i]);
                strcpy(temp3, a.area[i]);
                strcpy(temp4, a.workers[i]);
                //a.name[i] = "";
                strcpy(a.name[i], a.name[i + 1]);
                strcpy(a.ownership[i], a.ownership[i + 1]);
                strcpy(a.area[i], a.area[i + 1]);
                strcpy(a.workers[i], a.workers[i + 1]);
            }
        }
    }
}
void AddNew(int& size, Factory& a)
{
    size++;
    char** temp = new char* [size];
    char** temp1 = new char* [size];
    char** temp2 = new char* [size];
    char** temp3 = new char* [size];    
    for (int i = 0; i < size; i++)
    {
        temp[i] = new char[50];
        temp1[i] = new char[50];
        temp2[i] = new char[50];
        temp3[i] = new char[50];        
    }
    for (int i = 0; i < size - 1; i++)
    {
        strcpy(temp[i], a.name[i]);
        strcpy(temp1[i], a.ownership[i]);
        strcpy(temp2[i], a.area[i]);
        strcpy(temp3[i], a.workers[i]);
    }
    cout << "Enter the factory name: ";
    cin >> temp[size - 1];
    cout << "The types of property: N - national, P - private, C - cooperative";
    cout << "\nEnter the type of property: ";    
    cin >> temp1[size - 1];
    cout << "Enter the area of land(hectares): ";
    while (MyAudit(temp2[size - 1]) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin.ignore();
        cin >> temp2[size - 1];
    }    
    cout << "Enter the number of workers: ";    
    while (MyAudit(temp3[size - 1]) != true)
    {
        cout << "\nError! Enter a correct value: ";
        cin.ignore();
        cin >> temp3[size - 1];
    }        
    a.name = temp;
    a.ownership = temp1;
    a.area = temp2;
    a.workers = temp3;    
}