#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();
}
Квадратная матрица, С++
11111
01110
00100
01110
11111
с использованием динамической памяти.
Для решения был написан такой код:
Код:
В чем ошибки?
Код:
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(" %d ",a[j]);
printf("\n");
}
{
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;
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;
Примерно так...
Код:
...
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;
}
...
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 делает тоже самое лучше.