Skip to content

Help me. Code on C  #96

Description

@jenkomq

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;
    }
}

}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions