Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <stdlib.h>
- #include <stdio.h>
- #include <conio.h>
- using namespace std;
- int main(int argc, char *argv[]){
- start:
- system("CLS");
- printf("Lab 9\n Graph algorithms. Streams\n Bershadskiy Andrew IS-81\n"); //меню
- printf("---------------Options---------------\n");
- printf("1. Read from text file\n");
- printf("2. Exit\n");
- printf("Choose your option: ");
- int switcher = 0; //переменная опции меню
- scanf("%d", &switcher);
- getchar();
- switch (switcher) //выбор опции из меню
- {
- case 1:{
- FILE* data; //указатель на файл
- if (argc == 1){ //открыть файл как аргумент или data.txt
- data = fopen("data.txt", "r"); //присваиваем значение указателю
- }
- else {
- data = fopen(argv[1], "r");
- }
- if (data == NULL){ //если файл не существует - ошибка
- printf("Error! Cant locate the file");
- exit(1);
- }
- //Буфер для вводу з файлу
- char count_buffer[3];
- if (fgets(count_buffer, 101, data) == NULL){ //якщо не має числа кубиків - помилка
- printf("Missing cubes count!");
- exit(1);
- }
- int cubes_count; //переменная колличества кубиков
- if ((cubes_count = atoi(count_buffer)) <= 0){ //проверка является ли колличество кубиков натуральным числом
- printf("Cubes count is not natural number!");
- exit(1);
- }
- char name[101]; //переменная имени
- if (fgets(name, 101, data) == NULL){ //проверка на считывание имени
- printf("Wrong input name");
- exit(1);
- }
- char **cubes_data_array; //массив считанных с кубиков данных
- cubes_data_array = new char*[cubes_count]; //выделение памяти
- for (int i = 0; i < cubes_count; i++)
- {
- cubes_data_array[i] = new char[6];
- }
- for (int i_cube = 0; i_cube < cubes_count; i_cube++){
- for (int i_side = 0; i_side < 6; i_side++){
- char ch = fgetc(data);
- if ((ch == '\n') || (ch == EOF)){ //если конец файла или нет данных - ошибка
- printf("Wrong cubes info");
- exit(1);
- }
- cubes_data_array[i_cube][i_side] = ch; //сохраняет информацию на кубик и его сторону
- }
- fgetc(data);
- }
- fclose(data); //закрываем файл
- int name_length; //переменная длинны имени
- for (int i = 0; i < 101; i++){ //узнаем длинну имени
- if (name[i] == '\n'){
- name_length = i;
- break;
- }
- }
- int *order = new int[name_length]; //переменная порядка букв
- for (int i = 0; i < name_length; i++){
- order[i] = -1; //заполнение массива
- }
- bool *cube_available = new bool[cubes_count]; //переменная наличия кубика
- for (int i = 0; i < cubes_count; i++){
- cube_available[i] = true; //заполнение массива
- }
- int letter_place = 0; //переменная места буквы
- while (letter_place < name_length && letter_place >= 0)//пока место буквы меньше длинны слова и больше или равняеться 0
- {
- char target_letter = name[letter_place];
- bool found_target = false;
- for (int i_cube = 0; i_cube < cubes_count; i_cube++){ //найти нужный кубик
- if (cube_available[i_cube]){ //проверить есть ли нужная буква на кубике
- for (int i_side = 0; i_side < 6; i_side++){
- if (cubes_data_array[i_cube][i_side] == target_letter){ //если нужная буква
- order[letter_place] = i_cube; //записываем в массив порядка букв
- cube_available[i_cube] = false; //записываем, что кубик использован
- found_target = true; //записываем, что цель найдена
- break;
- }
- }
- if (found_target){
- break;
- }
- }
- }
- if (found_target){
- letter_place++; //переходим к следующей букве
- }
- else {
- cube_available[order[letter_place]] = true; //оставляем кубик
- order[letter_place] = -1; //заполняем значениями, которые показывают отсутствие
- letter_place--;
- }
- }
- if (letter_place == -1){ //если порядок не найден - ошибка
- printf("There is no variants\n");
- }
- else { //иначе - порядок найден
- printf("There is variant:\n");
- for (int i = 0; i < name_length; i++){
- printf("%d", order[i] + 1);
- printf("%s", "\n");
- }
- }
- printf("%s", "Press any key to exit");
- _getch();
- }
- goto start;
- case 2:{
- printf("Goodbye!");
- _getch();
- exit(0);}
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement