Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста!!! Заполнение массива[100][1], мучаюсь второй день 
:(
    Опции темы
LeoGD
Дата 26.5.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Уже как 5-6 часов в суммме, уже второй день чижу где-то над 10 строками кода и не могу понять в чем дело.
Я в соответствии с введеннымы ребрами и вершинами создаю матрицу смежности A, парралельно вводя ребра в массив C[100][2]

матрица смежности a[sk][sb]:
sk и sb у меня вводятся в цикле с клавиаутуры, сам массив а динамический и размерность задается предварительным вводом кол-ва вершин
1 2
2 2
1 3
3 1

они нормально изменяют матрицу смежности, увеличивая значения на один при каждой смежности.

И у меня есть проблемный массив C:
в него все в течении ввода и формирования массива а записываются введенные sk и sb чтобы получить тоже самое что и при вводе, а выходит вот что:

Vvedite poo4eredno rebra, po zaverweniyu vvedite '0' ili <0
1 2
2 2
1 3
3 1

0

0 1
1 0
0 2
2 0
и даже если учесть что выходной массив должен иметь каждый элемент на один больше, то всеравно ошибки и каждый раз новая картина...
Код

#include<stdio.h>
#include<math.h>
#include<fstream.h>
#include <conio.h>
#include<iostream>
#include <deque>
using namespace std;
const char *file="pass.txt";

struct gr
    {
        int numb;
        int ves;
        deque<int> smej;
    };

    deque<gr> ver;
    gr  inf;
int main()
{
    
    int i,j, k ,n,t=0,sk, sb,menu, grani=0;
    float v;
    bool graf=false;
    int **a; //Создание динамического массива с размерностью n*n
    float *b;
    int c[10][1]; // maximalnoe koli4estvo reber.
    for (i=0; i<10; i++)
        for (j=0; j<=1; j++)
            c[i][j]=-1;
    for (i=0; i<10; i++)
    {
        for (j=0; j<=1; j++)
        {
            printf("%d", c[i][j]);
        }
        printf("\n");
    }
    printf("\nVyberite deystvie:");
    printf("\n1: Vvesti bazovuyu matricu");
    printf("\n2: Vyvesti matricu smejnosti");
    printf("\n3: Vyvesti spisok spiskov");
    printf("\n4: Dobavit verwinu");
    printf("\n5: Dobavit gran");
    printf("\n6: Udalit gran");
    printf("\n7: Udalit verwiny");
    printf("\n8: Vyhod");
    
    while(true)
    {
        printf("\n- ");
        scanf("%d", &menu);
    switch (menu)
    {
        case 1:
        printf("\nSozdanie bazovogo grafa");
        printf("\nVvedite kol-vo verwin: ");
        scanf("%d",&n); //Задается размерность массива - будующей матрицы смежности
        
        a=new int* [n];
        for (i=0; i<n; i++)
            a[i]=new int [n];
        for (i=0; i<n; i++)
            for (j=0; j<n; j++)
            {
                a[i][j]=0;
            }
        
         
        b=new float [n]; //Создание вектора с размерностью n
        graf=true;
///////////////////////////////////////////////////// -------------------------> ввод
        printf("\nVvedite poo4eredno rebra, po zaverweniyu vvedite '0' ili <0\n");
        for (i=0; i<100; i++) //Ввод вершин
        {
            scanf("%d",&sk);
            if (sk<=0) //Выход из цикла, если вводится 0 или число <0
            {
                break;
            }
            scanf("%d",&sb);
            if (sk>n || sb>n) //При неправильном вводе вершин
                printf("\nOwibo4niy vvod, poprobuyte ewe raz!\n");
            else if (sk>0 && sb>0) //Правильный ввод вершин
            {
                sk--; sb--;
                if (sk != sb)
                    a[sb][sk]++;
                a[sk][sb]++;
                c[grani][0]=sk;
                c[grani][1]=sb;
                grani++;
            }
            else //При любом неправильном вводе вершин
                printf("\nOwibo4niy vvod, poprobuyte ewe raz!\n");
        }
///////////////////////////////////////////////////// -------------------------> вывод
        for (i=0; i<=n; i++)
        {
            for (j=0; j<=1; j++)
            {
            printf("%d ", c[i][j]);
            }
            printf("\n");
        }

        printf("\nTeper vvedite ves kajdoy verwiny: \n");
        for (i=0; i<n; i++) //Заполнение вектора значениями веса вершин графа
        {
            printf("%d",i+1);
            printf(": ");
            scanf("%f",&v);
            b[i]=v;
        }




        for(i=0;i<n;i++)
        {
            inf.numb=(i+1);
            inf.ves=b[i];            
            for(j=0;j<100;j++)
            {
                if((i+1)==c[j][0])
                    inf.smej.push_back(c[j][1]);
            }
            ver.push_back(inf);

            {
                int tmp=inf.smej.size();
                for(int i=0;i<tmp;i++)
                inf.smej.erase(inf.smej.begin());
            }        
        }
        break;
        case 2:
        printf("\nVyvod: matrica smejnosti, ves verwin, a takje spisok spiskov");
        printf("\nMatrica smejnosti:\n"); //Красивый вывод матрицы смежности
        printf("    ");
        for (i=0; i<n; i++)
        {
            printf("%d",i+1);
            printf("  ");
        }
        printf("\n    ");
        for (i=0; i<n; i++)
            printf("|  ");
        printf("\n\n");
        for (i=0; i<n; i++)
        {
            printf("%d",i+1);
            printf("-");
            for (j=0; j<n; j++)
                printf("%3d",a[i][j]);
            printf("\n");
        }
        printf("\nVes verwin:\n"); //Вывод массива значений веса
        for (i=0; i<n; i++)
            printf("%5.1f", b[i]);


        for(i=0;i<ver.size();i++)
        {
            printf("\n");
            printf("%d: %d",ver[i].numb, ver[i].ves);
            for(j=0;j<ver[i].smej.size();j++)
            printf(" - %d", ver[i].smej[j]);
        }





        break;


        case 3:
            printf("\nSpisok spiskov:");
            break;
        case 4:


        case 5:
        case 6:
        case 7:
        case 8:
            if (graf==true)
            {
                for (i=0; i<n; i++)
                    delete[]a[i]; //Удаление массивов
                delete [] b;
            }
            return(-1);
        default :
            printf("\nMenyu:");
            printf("\n1: Vvesti bazovuyu matricu");
            printf("\n2: Vyvesti matricu smejnosti");
            printf("\n3: Vyvesti spisok spiskov");
            printf("\n4: Dobavit verwinu");
            printf("\n5: Dobavit gran");
            printf("\n6: Udalit gran");
            printf("\n7: Udalit verwiny");
            printf("\n8: Vyhod");    
            break;
    }
    }
}

PM MAIL   Вверх
LeoGD
Дата 26.5.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Я за эти два дня попытался решить эту проблему примерно с восьмью знакомыми программистами, никто не знает в чем проблема массива С. Большая просьба откомпилировать у себя этот код и попробывать разные вводы - вы будете удивлены. Но я всеже надеюсь что кто-нибудь найдет объяснение этой ошибке...

Vyberite deystvie:
1: Vvesti bazovuyu matricu
2: Vyvesti matricu smejnosti
3: Dobavit verwinu
4: Dobavit gran
5: Udalit gran
6: Udalit verwiny
7: Vyhod
- 1

Sozdanie bazovogo grafa
Vvedite kol-vo verwin: 3

Vvedite poo4eredno rebra, po zaverweniyu vvedite '0' ili <0
1 2
3 1
2 2
2 3
1 3
0
0 2
2 1
1 1
1 0
0 2
// ДАЛЕЕ НЕ ВАЖНО
Teper vvedite ves kajdoy verwiny:

Зарание спасибо за попытку найти причину!
PM MAIL   Вверх
Mayk
Дата 26.5.2005, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Если я правильно понял, таблицы должны совпасть с учетом декрементации в 85 строке,
а они не делают. Но...
в 26ой строке идет
int c[10][1]; // maximalnoe koli4estvo reber.
а в 90ой
c[grani][1]=sb;
А это не правильно.
Индексы массивов в сях задаются полуинтервалами [0..n), в данном случае n=1. То есть нельзя делать 90ую строку. В 26ой исправь 1 на 2, должно полегчать.




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
LeoGD
Дата 27.5.2005, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Да, это помогло!!! Огромное спасибо за ответ, с индексами я вроде разобрался, буду теперь это учитывать! ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1103 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.