Skip to content

Help me. Code on C  #96

Open
Open
@jenkomq

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

}

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