Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Help me. Code on C #96

Open
jenkomq opened this issue Dec 1, 2023 · 0 comments
Open

Help me. Code on C #96

jenkomq opened this issue Dec 1, 2023 · 0 comments

Comments

@jenkomq
Copy link

jenkomq commented Dec 1, 2023

Help with the code, please. The output of the tile cost and the total number of tiles does not work.

Code on C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _crt_secure_no_deprecate
#include <stdio.h>
#include <stdlib.h>
#define _use_math_defines
#include <math.h>
#include <locale.h>
#pragma warning(disable : 4996)

// структура, представляющая информацию о плитке
typedef struct {
char type[20]; // тип плитки
double length; // длина плитки
double width; // ширина плитки
double price; // цена плитки
} tile;

// структура, представляющая информацию о помещении
typedef struct {
char name[50]; // название помещения
double length; // длина помещения
double width; // ширина помещения
double wallprotrusion; // выступы стены
double area; // площадь помещения
double volume; // объем помещения
} room;

// функция для чтения информации о строительных материалах из файла
tile* readtilesfromfile(char* filename, int* numtiles) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("не удалось открыть файл\n");
return NULL;
}

fscanf(file, "%d", numtiles);
tile* tiles = (tile*)malloc((*numtiles) * sizeof(tile));

for (int i = 0; i < *numtiles; i++) {
    fscanf(file, "%s %lf %lf %lf", tiles[i].type, &tiles[i].length, &tiles[i].width, &tiles[i].price);
}

fclose(file);
return tiles;

}

// функция для записи информации о материалах, помещениях и конструкциях в файл
void writedatatofile(char* filename, room* room, int numtiles, tile* tiles) {
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("не удалось открыть файл\n");
return;
}

// запись информации о помещении
fprintf(file, "%s %.2lf %.2lf %.2lf\n", room->name, room->length, room->width, room->wallprotrusion);

// запись информации о плитках
fprintf(file, "%d\n", numtiles);
for (int i = 0; i < numtiles; i++) {
    fprintf(file, "%s %.2lf %.2lf %.2lf\n", tiles[i].type, tiles[i].length, tiles[i].width, tiles[i].price);
}

fclose(file);

}

// функция для вывода изображения помещения
void printroom(const room* room) {
int totallength = (int)room->length;
int totalwidth = (int)room->width;

for (int i = 0; i < totallength + 2; i++) {
    printf("-");
}
printf("\n");

for (int i = 0; i < totalwidth; i++) {
    printf("|");
    for (int j = 0; j < totallength; j++) {
        printf(" ");
    }
    printf("|\n");
}

for (int i = 0; i < totallength + 2; i++) {
    printf("-");
}
printf("\n");

}

int main() {
setlocale(LC_ALL, "rus");
char filename[100];
int choice;
room room;
tile* tiles = NULL;
int numtiles = 0;

printf("введите название файла: ");
scanf("%s", filename);

// создание и открытие файла для записи
FILE* file = fopen(filename, "r");
if (file == NULL) {
    printf("не удалось открыть файл\n");
    return -1;
}
fclose(file);

// чтение данных из файла
tiles = readtilesfromfile(filename, &numtiles);

while (1) {
    printf("\n ********************главное меню********************");
    printf("\n1) рассчитать количество плиток и стоимость\n");
    printf("2) вывести изображение помещения\n");
    printf("3) запись информации в файл\n");
    printf("4) изменить данные о помещении\n");
    printf("5) считать данные из файла\n");
    printf("6) вывести информацию о размерах плитки\n");
    printf("7) выйти из программы\n");
    printf("введите выбор (1-7): ");
    scanf("%d", &choice);

    switch (choice) {
    case 1: // рассчитать количество плиток и стоимость
        printf("введите длину помещения (в метрах): ");
        scanf("%lf", &room.length);
        printf("введите ширину помещения (в метрах): ");
        scanf("%lf", &room.width);
        printf("введите выступы стены (в метрах): ");
        scanf("%lf", &room.wallprotrusion);

        // вычисление площади пола
        room.area = room.length * room.width;

        // вычисление объема помещения
        room.volume = room.area * room.wallprotrusion;

        printf("площадь помещения: %.2lf м^2\n", room.area);
        printf("объем помещения: %.2lf м^3\n", room.volume);

        // вычисление площади и стоимости для каждой плитки
        for (int i = 0; i < numtiles; i++) {
            printf("введите цену за штуку плитки (в рублях): ");
            scanf("%lf", &tiles[i].price);

            double tilearea = tiles[i].length * tiles[i].width;
            double numtotaltiles = room.area / tilearea + 0.5; // округляем результат к ближайшему целому
            int roundednumtotaltiles = (int)round(numtotaltiles); // приводим результат к типу int
            double totalprice = roundednumtotaltiles * tiles[i].price;

            printf("для плитки %s:\n", tiles[i].type);
            printf("необходимо %.0lf плиток\n", numtotaltiles);
            printf("стоимость всего материала: %.2lf рублей\n", totalprice);
        }
        break;

    case 2: // вывести изображение помещения
        printf("введите название помещения: ");
        scanf("%s", room.name);
        printroom(&room);
        break;

    case 3: // запись информации в файл
        writedatatofile(filename, &room, numtiles, tiles);
        printf("данные успешно записаны в файл\n");
        break;

    case 4: // изменить данные о помещении
        printf("введите длину помещения (в метрах): ");
        scanf("%lf", &room.length);
        printf("введите ширину помещения (в метрах): ");
        scanf("%lf", &room.width);
        printf("введите выступы стены (в метрах): ");
        scanf("%lf", &room.wallprotrusion);
        break;

    case 5: // считать данные из файла
        tiles = readtilesfromfile(filename, &numtiles);
        break;

    case 6: // вывести информацию о размерах плитки
        printf("Размеры плитки:\n");
        for (int i = 0; i < numtiles; i++) {
            printf("Тип плитки: %s\n", tiles[i].type);
            printf("Длина плитки: %.2lf\n", tiles[i].length);
            printf("Ширина плитки: %.2lf\n", tiles[i].width);
            printf("Цена плитки: %.2lf\n", tiles[i].price);
        }
        break;

    case 7: // выйти из программы
        printf("программа завершена\n");
        return 0;

    default:
        printf("некорректный выбор\n");
        break;
    }
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant