Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Квадратная матрица, С++

34K
05 февраля 2008 года
Allor
2 / / 05.02.2008
Необходимо построить матрицу вида

11111
01110
00100
01110
11111

с использованием динамической памяти.
Для решения был написан такой код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
clrscr();
int **a,i,n,j;
printf("‚‚…„€’… ђЂ‡Њ…ђЌЋ‘’њ ЊЂ’ђ€–›: ");
scanf("%d",&n);


a=(int **) malloc (n * sizeof(int *));
for(i=0;i<n;i++)
    a=(int *) malloc (n * sizeof(int));

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

for(i=0;i<n/2;i++)
    for(j=i;j<n-2-i;j++)
    {
        a[j]=0;
    }
for(i=(n-1)/2;i<n-1;i++)
    for(j=n-2-i;j<i;j++)
    {
        a[j]=0;
    }
for(i=0;i<n-1;i++)
    for(j=0;j<n-1-i;j++)
    {
        a[j]=1;
    }
for(i=0;i<n-1;i++)
    for(j=n-2-i;j<n-1;j++)
    {
        a[j]=1;
    }
for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
        printf(" %d ",a[j]);
    printf("\n");
    }
for(i=0;i<n;i++)
    free(a);
free(a);
getch();
}


В чем ошибки?
247
05 февраля 2008 года
wanja
1.2K / / 03.02.2003
 
Код:
for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
        printf(" %d ",a[j]);
    printf("\n");
    }


Зачем ты выводишь значения элементов, не присвоив им никакого значения? Это раз.
Кстати, раз уж это C++, не проще ли выделять склероз при помощи new?
А задание этих значений, по-моему проще сделать так:
Код:
for (i=0;i<n;i++)
    for (j=0;j<n;j++)
         a[j]=0;
//Обнуляем все, значить
for (i=0;i<n/2;i++)
    {
     for (j=i;j<n-i-1;j++)
          {
          a[j]=1;
          a[n-i-1][j]=1;
          }
    }
if (i%2!=0)
   a[i/2+1][j/2+1]=1;

Примерно так...
320
05 февраля 2008 года
m_Valery
1.0K / / 08.01.2007
Код:
...
void main()
{
   const size_t n = 5;
   int **mas = new int*[n];  
   for(size_t i = 0;i < n;++i){
       mas = new int[n];
      for(size_t j = 0;j < n;++j)
          if(j >= i && i <= n - j - 1||i >= j && i >= n - j - 1)
             mas[j] = 1;
          else
             mas[j] = 0;
   }
   cout<<endl;
   for(size_t i = 0;i < n;++i){
      for(size_t j = 0;j < n;++j)
        cout<<setw(5)<<mas[j];
      cout<<"\n\n";
   }
   for(size_t i=0;i<n;i++)
        delete[] mas;
    delete[] mas;
}
...

P.S.Рекомендация от Герба Саттера - предпочтительно использовать свободную память new/delete;использования кучи malloc/free следует избегать.
Рекомендация от Бьерна Страуструпа - не используйте malloc.Оператор new делает тоже самое лучше.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог