Форум программистов, компьютерный форум CyberForum.ru

Не могу определить причину "магической" операции присвоения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать матрицу по формуле и вывести её на экран http://www.cyberforum.ru/cpp-beginners/thread1701427.html
Народ помогите пожалуйста нужно создать и вывести матрицу по формуле. программа не работает в данном виде компилятор выдает ошибку индекс имеет нецелый тип при изменение i,j на int вообще дико ругается на cos и sqrt. Где ошибки подскажите? #include <iostream> #include <math.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); const int n=6,m=7;
C++ Поиск по .txt файлу Доброго времени суток . Есть char стока , которая записывается с клавиатуры . После этого нужно сравнить содержимое стоки , с содержимым файла построчно . Если char стока ровняется одной из строк файла , вывести следующую строку файла . Заранее спасибо за ответы . Добавлено через 1 час 9 минут Или , как занести строки файла в массив ? http://www.cyberforum.ru/cpp-beginners/thread1701419.html
C++ Вычислить значения выражения по итерационной формуле
Народ помогите пожалуйста с задачей по С++. Даже не знаю с чего начать. Заранее спасибо По заданному вещественному x вычислить значения x^(1/3) по следующей итерационной формуле : y(i=1)=0.5(y(i)+3x/(2sqr(y(i))+x/y(i)) Начальное приближение : y(0)=x Итерации прекратить при ...
C++ Сделать записи с клавиатуры в файл C++
Задача звучит так: Сделать 3 записи в файл формата .txt(фамилия, имя, возраст). Вводиться записи должны с клавиатуры. Костяк программы выглядит вот так: #include "stdafx.h" #include "stdio.h" #include "conio.h" #include "iostream" #include "stdlib.h"
C++ Определить количество столбцов, упорядоченных по возрастанию http://www.cyberforum.ru/cpp-beginners/thread1701391.html
Задана матрица В(n,m). Определить количество столбцов, упорядоченных по возрастанию. Каждый второй столбец упорядочить по возрастанию и найти, на сколько увеличилось количество таких упорядоченных столбцов. Помогите ,не много изменить код. Как сделать чтобы это не было заданоconst int n=5, m=5;, а пользователь сам вводил n и m. И в самом начале сделать , чтобы программа определяла в первой...
C++ WinAPI Переделать код из юникода в мультибайтовую кодировку Никак не могу переделать код из юникода в мультибайтовую кодировку. DWORD WINAPI downloadThread(LPVOID pParam){ //EndDialog(hDDlg, 0); TCHAR out_files = { 0 }; // 102,4 KB TCHAR out_path = { 0 }; GetDlgItemText(hDDlg, 1008, out_files, 102400); GetDlgItemText(hDDlg, 1009, out_path, 1024); int count = 0; подробнее

Показать сообщение отдельно
Lyosha12
6 / 6 / 0
Регистрация: 02.04.2016
Сообщений: 138

Не могу определить причину "магической" операции присвоения - C++

02.04.2016, 18:11. Просмотров 239. Ответов 9
Метки (Все метки)

Суть такая: написал посимвольный парсер для консоли. До недавнего времени работал как часы. Обращаюсь сюда по тому, что понять не могу причину такой магии:

При присвоении значения элементу массива [0][1], значение присваивается и [0][1], и [1][0]. Как? Я не вижу, чтобы я то увеличивал индекс строк и уменьшал индекс столбцов, то возвращал их обратно (я бы такую конструкцию заметил -_-)

Моё творение:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
#define size 50
bool isNegative = false;
 
int invert_number(int current){
    int newCurrent = 0, F = current, number_count = 0;
    while(abs(F) > 0){
        F /= 10;
        number_count++;
    }
 
    int i = --number_count; int j = 0;
    while(abs(current) > 0){
        newCurrent += (current/pow(10,(double)i))*pow(10,(double)j++);
        current %= (int)pow(10,(double)i--);
    }
    if(isNegative == true){
        isNegative = false;
        return -newCurrent;
    }
    else
        return newCurrent;
}
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
void main(){setlocale (0,"");
    int MN1[size][1], MN2[size][1], countMN1, countMN2;
 
    for(int i = 0; i < size; i++){
        MN1[i][0] = 0; MN1[i][1] = 0; 
        MN2[i][0] = 0; MN2[i][1] = 0;
    }
    cout<< " Введите количество заданных точек первого множества (<" << size << "): ";
        cin >> countMN1; 
    cout<< " Введите количество заданных точек второго множества (<" << size << "): ";
        cin >> countMN2; 
 
                for(int i = 0; i < countMN1; i++) {
                if(i%3 == 0) 
                    cout<< endl << "\tТочка A" << i << ": (" << MN1[i][0] << "," << MN1[i][1] << "); ";
                else 
                    cout<< "\tТочка A" << i << ": (" << MN1[i][0] << "," << MN1[i][1] << "); "; 
            }
            cout<< endl;
 
    cout<< " Введите " << countMN1 << " точек первого множества в формате "x1,y2 x2,y2 ...":\n -> ";
 
 
    /* -------------------------- Парсер -------------------------- */
    int number_pos = 0, index_x = 0; char this_char = 0, x_or_y_next = 'X';
 
 
    while(index_x < countMN1){
        /* Получение символ слева направо */
        this_char = getchar();
        
        /* Если символ - минус */
        if(this_char == '-'){ 
            isNegative = true; continue;
        }
 
        /* Получение цифр из символов для координат X1 и Y1 точки A */
        if(this_char >= '0'  &&  this_char <= '9'  &&  x_or_y_next == 'X'){ MN1[index_x][0] += (-'0' + this_char) * pow(10,(double)number_pos); number_pos++; continue; }
        if(this_char >= '0'  &&  this_char <= '9'  &&  x_or_y_next == 'Y'){ 
            MN1[index_x][1] = MN1[index_x][1] + (-'0' + this_char) * pow(10,(double)number_pos); 
            number_pos++; 
            continue; }
 
        /* Обработка запятой после коордиаты X1 */
        if(this_char == ',' && x_or_y_next == 'X') {
            MN1[index_x][0] = invert_number(MN1[index_x][0]); 
            x_or_y_next = 'Y'; number_pos = 0; continue; }
 
        /* Обработка пробела и новой строки после координаты Y1 */
        if((this_char == ' ' || this_char == 10) && x_or_y_next == 'Y') {
            MN1[index_x][1] = invert_number(MN1[index_x][1]);
            number_pos = 0; index_x++; x_or_y_next = 'X'; 
            continue; }
 
        /* Обработка перевода строки \ подтверждения ввода */
        if(this_char == 10) continue;
 
    }
 
    cout<< endl;
 
            for(int i = 0; i < countMN1; i++) {
                if(i%3 == 0) 
                    cout<< endl << "\tТочка A" << i << ": (" << MN1[i][0] << "," << MN1[i][1] << "); ";
                else 
                    cout<< "\tТочка A" << i << ": (" << MN1[i][0] << "," << MN1[i][1] << "); "; 
            }
            cout<< endl;
 
    /* ---------------------------- Конец парсера -------------------------- */
    system("pause");
}


Проблема наблюдается в этом участке:
C++
1
2
3
        if(this_char >= '0'  &&  this_char <= '9'  &&  x_or_y_next == 'Y'){ 
            MN1[index_x][1] = MN1[index_x][1] + (-'0' + this_char) * pow(10,(double)number_pos); 
            number_pos++;
Могу даже видео прикрепить, если не верите .-.
Кликните здесь для просмотра всего текста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru