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

Сбой данных. Списки списков. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать структуру с именем TRAIN http://www.cyberforum.ru/cpp-beginners/thread548095.html
Вот условие: Описать структуру с именем TRAIN, содержащую следующие поля: -название пункта назначения; -номер поезда; -время отправления. Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из 6 элементов типа TRAIN; -записи должны быть упорядочены по времени отправления поездов; -вывод на экран информации о поездах, направляющихся в пункт,...
C++ Switch двойное условие Как сделать двойное условие для оператора switch? Аналогия в if: "if (a>b & b>c)" . http://www.cyberforum.ru/cpp-beginners/thread548081.html
Составление алгоритмов и написание программ обработки строк C++
Молю о помощи. С этими строками у меня просто беда... Функция int isLatin (TCHAR s) получает символ и определяет, является ли он символом латиницы (строчной или прописной буквы латинского алфавита) Функция TCHAR* isStrLatinBukv (TCHAR* str, int& n) получает исходную строку str и ищет в ней первую подстроку, содержащую только символы латиницы (строчные или прописные буквы латинского ...
C++ В строку через пробел вводятся слова. Отсортировать введенные слова по алфавиту. Результат вывести в виде столбца.
В строку через пробел вводятся слова. Отсортировать введенные слова по алфавиту. Результат вывести в виде столбца.
C++ Вычислить дробную часть среднего геометрического трех заданных положительных чисел. http://www.cyberforum.ru/cpp-beginners/thread548071.html
Вычислить дробную часть среднего геометрического трех заданных положительных чисел. Предусмотреть проверку вводимых данных на отрицательность.
C++ В каждой строке заданной матрицы A(N, M) вычислить сумму, количество... В каждой строке заданной матрицы A(N, M) вычислить сумму, количество и средне арифметическое положительных элементов. подробнее

Показать сообщение отдельно
Dan299
1 / 1 / 0
Регистрация: 17.09.2011
Сообщений: 39
20.04.2012, 21:52  [ТС]     Сбой данных. Списки списков.
Каждый многочлен задан списком. В свою очередь система задана тоже списком из многочленов... С этим у меня всё правильно. Проблема только в проверке ортогональности попарно всех многочленов.
У ортогональных многочленов скалярное произведение равно 0. Т.е. сумма произведений коэфициентов при одинаковых степенях (переменных) равно 0.

Добавлено через 1 час 8 минут
В общем с некоторыми проблемами я разобрался. Но ещё осталась одна. Вот переправленный код
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
#include <iostream>
#include <locale>
#include <string>
#include <conio.h>
#include <math.h>
using namespace std;
struct Mnolen
{
    char s[5];
    int k;
    Mnolen *next;
};
struct System
{
    Mnolen *m;
    System *next;
};
int main()
{
    setlocale(LC_ALL,"");
    Mnolen *e = new Mnolen;
    Mnolen *first = new Mnolen;
    System *sys = new System;
    System *nach = new System;
    System *prom = new System;
    System *itog = new System;
    int count = 0, summ = 0, cp = 0, b = 5;
    nach = sys;
    while (2)
    {
        e = new Mnolen;
        first = e;
        while (1)
        {
            cout<<"Введите переменную и коэфициент:"<<endl;
            cin>>e->s;
            if (e->s[0] == '0') break;
            cin>>e->k;
            e->next = new Mnolen;
            e = e->next;
        }
        e = first;
        if (first->s[0] == '0') break;
        sys->m = e;
        sys->next = new System;
        sys->next->m = new Mnolen;
        sys->next->m->s[0] = '0';
        sys = sys->next;
    }
 
    prom = nach;
    while (5)
    {
        first = prom->m;
        sys = nach;
        cp = 0;
        b = 5;
        while (b != 0)
        {           
            summ = 0;
            e = sys->m;
            prom->m = first;
            while (prom->m->s[0] != 48)
            {
                e = sys->m;
                while (e->s[0] != '0')
                {
                    if (strcmp(prom->m->s, e->s) == 0)
                    {
                        summ = summ + (prom->m->k)*(e->k);
                        cout<<"+";              
                    }
                    e = e->next;
                }
                prom->m = prom->m->next;
            }
            if (summ == 0)
                    cp++;
            cout<<";"<<endl;
            if (sys->next->m->s[0] == '0') b = 0;
            sys = sys->next;
        }
        if (cp > count)
        {
            count = cp;
            itog->m = first;
        }
        if (prom->next->m->s[0] == '0') break;
        prom = prom->next;
    }
    e = itog->m;
    while (e->s[0] != '0')
    {
        cout<<e->k<<":"<<e->s<<endl;
        e = e->next;
    }
    getch();
    return 0;
}

Проблема заключается в том, что внутри проверки на ортогональность при переходе prom->m = prom->m->next одновременно переходит и значение nach, который по сути должен оставаться неизменным на протяжении всей проги. И хотя он конретно никуда не переходит, но почему то самопроизвольно меняется при изменении prom->m. В чём дело? Как исправить?
 
Текущее время: 05:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru