Установка Visual Studio 2010 - ошибка с подключением math.h - C (СИ)
Формулировка задачи:
Доброе утро!
Установил Visual Studio 2010 - не работает, выдаёт кучу ошибок типа:
Что самое обидное, я не использую в программе этот заголовочный файл!!!
Подскажите, пожалуйста, что делать с этим!
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(39): error C2061: синтаксическая ошибка: идентификатор "asin"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(39): error C2059: синтаксическая ошибка: ;
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2061: синтаксическая ошибка: идентификатор "atan"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2059: синтаксическая ошибка: ;
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2061: синтаксическая ошибка: идентификатор "atan2"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2059: синтаксическая ошибка: ;
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2061: синтаксическая ошибка: идентификатор "ceil"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(40): error C2059: синтаксическая ошибка: ;
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cmath(41): error C2061: синтаксическая ошибка: идентификатор "cos"
P.S.
Как вариант, подскажите, пожалуйста хоть одну человеческую программу-компилятор!!! Это уже просто задолбало - я пытался установить Visual Studio 2015 (3 раза, сначала требовало установить обновление для Internet Explorer!!!, затем просто установка зависала). Затем пробовал поставить 2013 - те же яйца, только сбоку. Установил 2010 - блин, и это ВЦ не работает!!! Microsoft вообще может сделать хоть один нормально работающий продукт?!? Блин, я понимаю, что я сейчас похож на ламера, но блин!!!! Почему проги из пакета просто не могут по-человечески запуститься?!?P.P.S.
Как вариант, подскажите, пожалуйста нормальный онлайн-компилятор. Все что я находил также несут какую-то ахинею про то, что у них отсутствуют стандартные библиотеки: conio.h: No such file or directory Вот такого типа. Подскажите хоть что-то, пожалуйста - я уже просто не знаю, что ещё можно делать - если с языком у меня вполне получилось разобраться, то что делать с компилятором - я уже просто не знаю.P.P.P.S.
Извиняюсь за чрезмерную экспрессию - уже три дня не могу поставить программу, сегодня вообще из-за неё спать не ложился. Уже близок к тому, чтобы начать крушить всё что можно =(((
Да, вот, собственно, код программы:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <windows.h>
#define ADRESS C:\\Users\\Андрей\\Desktop\\test.txt
char* file_download();
char* toLowerCaseAll(char* arr);
uzel* new_tree(char *arr);
char* word_to_bin(char *buff);
int search_in_bin(uzel *perv, char *bin);
char* perevorot(char* arr);
char* word_to_bin(char *buff);
int add_to_bin(uzel *perv, char*bin, char *b__word);
int sravn(char *BinRoot, char *Bin);
struct uzel {
char *s__word;
char *b__word;
uzel *pr_uzel;
uzel *lev_uzel;
};
int main() {
// Русифицируем =)
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Rus");
char *search = (char*)calloc(100, sizeof(char));
char *buff = (char*)calloc(100, sizeof(char));
char *bin = NULL;
int j = 0;
char *arr = file_download();
uzel *perv = new_tree(arr);
std::cout << "Введите искомое слово:" << std::endl;
gets_s(search, 99);
search = toLowerCaseAll(search);
for (int i = 0; i <= strlen(search); j++, i++) {
if (('а' <= search[i]) && (search[i] <= 'я') || (search[i] == 'ё')) {
buff[j] = search[i];
}
else {
bin = word_to_bin(buff);
}
}
search_in_bin(perv, bin);
_getch();
return(0);
}
//Функция для получения данных из файла
char* file_download() {
int length;
FILE *file = fopen("ADRESS", "rb"); // открытие файла
fseek(file, 0, SEEK_END); // перемещение курсора в конец
length = ftell(file); // записываем текущую позицию курсора (получаем размер файла)
fseek(file, 0, SEEK_START); //перемещение курсора в начала
char *arr = (char*)calloc(length + 1, sizeof(char));
fgets(arr, length+1, file); //считываем файл в строку arr
arr = toLowerCaseAll(arr); //переводим считанную строку в нижний регистр
fclose(file);
return(arr);
}
// Перевод всей строки в нижний регистр
char* toLowerCaseAll(char* arr) {
int length, i;
length = strlen(arr);
for (i = 0; i < length; i++) {
arr[i] = tolower(arr[i]);
}
return(arr);
}
// Функция для переворота строки
char* perevorot(char* arr) {
int length, i;
length = strlen(arr);
char *temp_str = (char*)calloc(++length, sizeof(char));
for (i = 0; i < strlen(arr); i++) {
length--;
temp_str[i] = arr[length];
}
return(temp_str);
}
//Функция преобразования слова в бинарный вид
char* word_to_bin(char *buff) {
char *arr = (char*)calloc(500, sizeof(char));
char *temp = (char*)calloc(100, sizeof(char));
int j = 0, i = 0, sim;
while(buff[i]){
int bin;
bin = buff[i];
while (bin / 2 > 0) {
sim = bin % 2;
temp[j] = sim + '0';
j++;
bin = bin / 2;
}
temp[j] = bin + '0';
temp = perevorot(temp);
strcat(arr, temp);
strcat(arr, " ");
free(temp);
temp = (char*)calloc(100, sizeof(char));
i++;
j = 0;
}
return(arr);
}
//Функция записи слова в бинарное дерево
int add_to_bin(uzel *perv, char*bin, char *b__word) {
int i;
if (perv->b__word == NULL) {
perv->b__word = bin;
perv->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->s__word, (char*)b__word);
return(0);
}
i = sravn(perv->b__word, bin);
if (i == 0) {
if (perv->lev_uzel == NULL) {
perv->lev_uzel = (uzel*)calloc(1, sizeof(uzel));
perv->lev_uzel->b__word = bin;
perv->lev_uzel->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->lev_uzel->s__word, (char*)b__word);
return(0);
}
add_to_bin(perv->lev_uzel, bin, b__word);
return(0);
}else{
if (i == 1) {
if (perv->pr_uzel == NULL) {
perv->pr_uzel = (uzel*)calloc(1, sizeof(uzel));
perv->pr_uzel->b__word = bin;
perv->pr_uzel->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->pr_uzel->s__word, (char*)b__word);
return(0);
}
add_to_bin(perv->pr_uzel, bin, b__word);
return(0);
}
}
}
//Функция поразрядного сравнения
int sravn(char *BinRoot, char *Bin) {
int check;
if (strlen(BinRoot) < strlen(Bin))return(1);
if (strlen(BinRoot) > strlen(Bin))return(0);
check = strcmp(BinRoot, Bin);
(check > 0)?(return(0)):(check < 0)?(return(1))?(check == 0)?(return(0));
}
//Функция ддя создания нового бинарного дерева
uzel* new_tree(char *arr) {
uzel *perv = (uzel*)calloc(1, sizeof(uzel));
char *buff = (char*)calloc(100, sizeof(char)); //буфер для отдельного слова строки
int j = 0, i;
for (i = 0; i <= strlen(arr); j++,i++) {
if ('а' <= arr[i] && arr[i] <= 'я' || arr[i] == 'ё') {
buff[j] = arr[i];
}else {
char *bin = word_to_bin(buff);
add_to_bin(perv, bin, buff);
free(buff);
buff = (char*)calloc(100, sizeof(char));
j = -1;
}
}
return(perv);
}
//функция поиска в дереве
int search_in_bin(uzel *perv, char *bin) {
int i;
if (strcmp(perv->b__word, bin) == 0) {
std::cout << "Введённое Вами слово: '" << perv->s__word << "' успешно найдено!" << std::endl;
return(0);
}
i = sravn(perv->b__word, bin);
if (i == 0) {
if (perv->lev_uzel == NULL) {
std::cout << "Введённое Вами слово не найдено. Наиболее похожее слово: " << perv->s__word << std::endl;
return(0);
}
search_in_bin(perv->lev_uzel, bin);
return(0);
}
if (i == 1) {
if (perv->pr_uzel == NULL) {
std::cout << "Наиболее подходящее слово в дереве: " << perv->s__word << std::endl;
return(0);
}
search_in_bin(perv->pr_uzel, bin);
return(0);
}
}Решение задачи: «Установка Visual Studio 2010 - ошибка с подключением math.h»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#define ADRESS "C:\\Users\\Андрей\\Desktop\\test.txt"
struct uzel{
char *s__word;
char *b__word;
struct uzel*pr_uzel;
struct uzel*lev_uzel;
};
char* file_download();
char* toLowerCaseAll(char* arr);
struct uzel* new_tree(char *arr);
char* word_to_bin(char *buff);
int search_in_bin(struct uzel*perv, char *bin);
char* perevorot(char* arr);
char* word_to_bin(char *buff);
int add_to_bin(struct uzel*perv, char*bin, char *b__word);
int sravn(char *BinRoot, char *Bin);
int main() {
// Русифицируем =)
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char *search = (char*)calloc(100, sizeof(char));
char *buff = (char*)calloc(100, sizeof(char));
char *bin = NULL;
int j = 0;
char *arr = file_download();
struct uzel*perv = new_tree(arr);
printf("Введите искомое слово:\n");
gets_s(search, 99);
search = toLowerCaseAll(search);
for (int i = 0; i <= strlen(search); j++, i++) {
if (('а' <= search[i]) && (search[i] <= 'я') || (search[i] == 'ё')) {
buff[j] = search[i];
}
else {
bin = word_to_bin(buff);
}
}
search_in_bin(perv, bin);
_getch();
return(0);
}
//Функция для получения данных из файла
char* file_download() {
int length;
FILE *file = fopen(ADRESS, "rb"); // открытие файла
fseek(file, 0, SEEK_END); // перемещение курсора в конец
length = ftell(file); // записываем текущую позицию курсора (получаем размер файла)
fseek(file, 0, SEEK_SET); //перемещение курсора в начала
char *arr = (char*)calloc(length + 1, sizeof(char));
fgets(arr, length + 1, file); //считываем файл в строку arr
arr = toLowerCaseAll(arr); //переводим считанную строку в нижний регистр
fclose(file);
return(arr);
}
// Перевод всей строки в нижний регистр
char* toLowerCaseAll(char* arr) {
int length, i;
length = strlen(arr);
for (i = 0; i < length; i++) {
arr[i] = tolower(arr[i]);
}
return(arr);
}
// Функция для переворота строки
char* perevorot(char* arr) {
int length, i;
length = strlen(arr);
char *temp_str = (char*)calloc(++length, sizeof(char));
for (i = 0; i < strlen(arr); i++) {
length--;
temp_str[i] = arr[length];
}
return(temp_str);
}
//Функция преобразования слова в бинарный вид
char* word_to_bin(char *buff) {
char *arr = (char*)calloc(500, sizeof(char));
char *temp = (char*)calloc(100, sizeof(char));
int j = 0, i = 0, sim;
while (buff[i]){
int bin;
bin = buff[i];
while (bin / 2 > 0) {
sim = bin % 2;
temp[j] = sim + '0';
j++;
bin = bin / 2;
}
temp[j] = bin + '0';
temp = perevorot(temp);
strcat(arr, temp);
strcat(arr, " ");
free(temp);
temp = (char*)calloc(100, sizeof(char));
i++;
j = 0;
}
return(arr);
}
//Функция записи слова в бинарное дерево
int add_to_bin(struct uzel*perv, char*bin, char *b__word) {
int i;
if (perv->b__word == NULL) {
perv->b__word = bin;
perv->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->s__word, (char*)b__word);
return(0);
}
i = sravn(perv->b__word, bin);
if (i == 0) {
if (perv->lev_uzel== NULL) {
perv->lev_uzel = (struct uzel*)calloc(1, sizeof(struct uzel));
perv->lev_uzel->b__word = bin;
perv->lev_uzel->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->lev_uzel->s__word, (char*)b__word);
return(0);
}
add_to_bin(perv->lev_uzel, bin, b__word);
return(0);
}
else{
if (i == 1) {
if (perv->pr_uzel== NULL) {
perv->pr_uzel= (struct uzel*)calloc(1, sizeof(struct uzel));
perv->pr_uzel->b__word = bin;
perv->pr_uzel->s__word = (char*)calloc(strlen((char*)b__word) + 1, sizeof(char));
strcpy(perv->pr_uzel->s__word, (char*)b__word);
return(0);
}
add_to_bin(perv->pr_uzel, bin, b__word);
return(0);
}
}
}
//Функция поразрядного сравнения
int sravn(char *BinRoot, char *Bin) {
int check;
if (strlen(BinRoot) < strlen(Bin))return(1);
if (strlen(BinRoot) > strlen(Bin))return(0);
check = strcmp(BinRoot, Bin);
return ((check >= 0) ? 0 : 1);
}
//Функция ддя создания нового бинарного дерева
struct uzel* new_tree(char *arr) {
struct uzel*perv = (struct uzel*)calloc(1, sizeof(struct uzel));
char *buff = (char*)calloc(100, sizeof(char)); //буфер для отдельного слова строки
int j = 0, i;
for (i = 0; i <= strlen(arr); j++, i++) {
if ('а' <= arr[i] && arr[i] <= 'я' || arr[i] == 'ё') {
buff[j] = arr[i];
}
else {
char *bin = word_to_bin(buff);
add_to_bin(perv, bin, buff);
free(buff);
buff = (char*)calloc(100, sizeof(char));
j = -1;
}
}
return(perv);
}
//функция поиска в дереве
int search_in_bin(struct uzel*perv, char *bin) {
int i;
if (strcmp(perv->b__word, bin) == 0) {
printf("Введённое Вами слово: '%s' успешно найдено!\n",perv->s__word);
return(0);
}
i = sravn(perv->b__word, bin);
if (i == 0) {
if (perv->lev_uzel== NULL) {
printf("Введённое Вами слово не найдено. Наиболее похожее слово: %s\n", perv->s__word);
return(0);
}
search_in_bin(perv->lev_uzel, bin);
return(0);
}
if (i == 1) {
if (perv->pr_uzel== NULL) {
printf("Наиболее подходящее слово в дереве: %s\n", perv->s__word);
return(0);
}
search_in_bin(perv->pr_uzel, bin);
return(0);
}
}
Объяснение кода листинга программы
В данном коде реализуется программа, которая выполняет следующие действия:
- Предобработка ввода пользователя:
- Присваивание переменной
searchуказателя на массив символов, выделенный с помощьюcalloc. - Присваивание переменной
buffуказателя на массив символов, выделенный с помощьюcalloc. - Присваивание переменной
binуказателя на массив символов, выделенный с помощьюcalloc. - Установка значения
jравным 0. - Считывание строки из файла в массив
arrс помощью функцииfgets. - Выполнение функции
toLowerCaseAllдля преобразования строкиarrв нижний регистр. - Закрытие файла.
- Присваивание переменной
- Создание нового бинарного дерева:
- Выделение памяти под структуру
uzelс помощьюcalloc. - Инициализация первого узла дерева.
- Рекурсивный обход дерева для добавления каждого слова из файла в дерево.
- Возвращение корневого узла дерева.
- Выделение памяти под структуру
- Поиск слова в дереве:
- Вызов функции
search_in_binс передачей в нее корневого узла дерева и искомого слова. - Вывод сообщения об успешном поиске, если слово найдено.
- Вывод сообщения о том, что слово не найдено, но найдено наиболее похожее слово, если слово не найдено в текущем узле.
- Рекурсивный вызов функции
search_in_binдля проверки следующего узла дерева.
- Вызов функции
- Функции:
toLowerCaseAllпреобразует строку в нижний регистр.word_to_binпреобразует слово в бинарный формат.add_to_binдобавляет слово в бинарное дерево.sravnсравнивает два бинарных дерева поразрядно.new_treeсоздает новое бинарное дерево.search_in_binвыполняет поиск слова в бинарном дереве.perevorotпереворачивает строку.