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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с массивом, на одном шаге два присвоения 
:(
    Опции темы
Rezzonans
Дата 25.5.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Народ, помогите разобраться с программой, а то её сдавать скоро, а она глючит. В коде я комментарий поместил, там рассказывается, что за ошибка.

Код

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
    int i,j,n,m,k,p,t,maxi,q;
    float **a,*b,*c;
    float r;
    printf("\nVvedite kolichestvo elementov v perestanovke n=");
    scanf("%d",&n);
    printf("\n");
    m=1;
    for(i=1;i<=n;i++)
    m=m*i;


    a=(float**)malloc(n*sizeof(float*));
    for(i=0;i<n;i++)
    *(a+i)=(float*)calloc(m,sizeof(float*));
    b=(float*)malloc(n*sizeof(float*));
    for(i=0;i<n;i++)
    {
        printf(" vvedite %d-i' element perestanovki: ",i+1);
        scanf("%f",&b[i]);
    }


    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
    {
            a[i][j]=0;
        }
        printf("\n");
    }


/*err*/

    a[0][0]=1;
    for(k=1;k<n;k++)
    {

        p=1;
    for(i=1;i<=k;i++)
        p=p*i;

    for(i=0;i<k;i++)
        for(j=0;j<p;j++)
        for(t=1;t<k+1;t++)
              a[i][j+t*p]=a[i][j];


        t=0;
    j=0;
            while(a[k-1][j]!=0)
            {
        for(i=0;i<k;i++)
        {








/*Проблемы с массивом a[k][j]. Почему-то в одном присваивании происходит 2 присвоения. К примеру, на первом шаге a[1][0] присвается значение 0,5, одновременно тоже значение присваивается a[0][4] на том же шаге*/







        a[k][j] = (float) (2*t+1)/2;

        j++;
    }
        t++;
            }

     c=(float*)malloc((k+1)*sizeof(float*));

            for(j=0;j<k*(k+1);j++)
        {

                for(i=0;i<k+1;i++)
                {
                maxi=0;
        for(t=0;t<k;t++)
                if(a[maxi][j]<a[t+1][j])
                maxi=t+1;
                c[maxi]=k-i+1;
                a[maxi][j]=0;
                }

        for(i=0;i<k+1;i++)
                a[i][j] = c[i];
                   }


    }


    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++){ printf(" %.2f",a[i][j]);}
    printf("\n");
    }




getch();
}



Код отлаживался в среде TC 3.0  

Это сообщение отредактировал(а) Rezzonans - 25.5.2006, 20:53
--------------------
Первый детектор лжи был собран из ребра мужчины. Впрочем, до сих пор, никаких изменений не притерпел
PM MAIL   Вверх
bsa
Дата 25.5.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Обычно, это проблема выхода индекса за границу. По шагам отладить не можешь что ли?
А разбирать сложно, код ужасно отформатирован. 
PM   Вверх
Earnest
Дата 26.5.2006, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(Rezzonans @  25.5.2006,  21:47 Найти цитируемый пост)
на первом шаге a[1][0] присвается значение 0,5, одновременно тоже значение присваивается a[0][4]

Это означает, что a[1][0] и a[0][4] - один и тот же элемент, ибо чудес не бывает. Так будет, если размер строки a равен 4: пятый элемент первой строки == первый элемент второй строки. 
Разберись со своими размерностями и индексами. 


--------------------
...
PM   Вверх
takedo
Дата 26.5.2006, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



*(a+i)=(float*)calloc(m,sizeof(float*)); - врде бы здесь надо писать sizeof(float)?
во-вторых:
Код

    m=1;
    for(i=1;i<=n;i++)
    m=m*i;
Это факториал что-ли? Посчитай на калькуляторе, сколько будет факториал 15?20? Задавай чего по проще, хотя бы просто номер элемента. Я к тому, что тебе наверное надо будет матрицу эту решить позже? Если да и для домашнего задания, то можешь ограничиться матрицей (3,3), но это лишнее, выделяй не маллок, каллок - лучше исспользуй new!!!
Код

double **a;
a = new double*[5];
for(i=0;i<5;i++)
a[i]=new double[55];

for(i=0;i<5;i++)
delete[] a[i];

delete[] a;

найди ошибку. 


--------------------
я не гольфист - я хоккеист
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.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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