Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2007, 21:35   #1
Stiker
 
Регистрация: 09.12.2007
Сообщений: 8
По умолчанию модульное программирование, С++

Необходимо сделать: Целочисленная матрица, число строк и столбцов. Функции: сумма элементов k-го столбца (k задается), добавление в матрицу одной строки снизу, получение последнего столбца, построчное объединение двух матриц по принципу: 1 - 1 строка первой матрицы, 2 - 1 строка второй матрицы, 3 - 2 строка первой матрицы, 4 - 2 строка второй матрицы и т.д., матрица, по периметру которой стоят нули + сохранение в файл и чтение из файла.(С++)
Проблема в том, что я что-то тут не правильно передаю. Если вводить квадратную матрицу (3х3 или 4х4) то работает все отлично, но если ввожу 4х5 или 4х7, то начинает выводится бурда. Почему-то строк становится 7 и т.п. Интересно и то, что если не выводить вывод в отдельную функцию, а ввод ставить там где и происходит действие, то так же все работает отлично. Ошибку никак найти не могу. Подскажите плиз.
Код C++
Код:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
//Процедура ввода матрицы
void enter(int **&a, int&n, int&m)  // Все параметры исходящие
{
int i=0,j=0;

randomize();
cout<<endl<<"Введите размерность";
cout<<endl<<"Enter n:";
cin>>n;
cout<<"Enter m:";
cin>>m;
a=new int*[n];
    for (i=0; i<n; i++)
        a[i]=new int[m];
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            a[i][j]=random(30);
    }
}

//Процедура просмотра введенной матрицы
void show (int **a, int n, int m)
{
int i=0,j=0;
cout<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<a[i][j];
            cout<<endl;
    }
}

}
//Просмотр матрицы с добавленой строкой. Зная, что лучше сделать в одну функцию, но мне так удобнее для понимания
void show1 (int **c, int n, int m)
{
int i=0,j=0;
cout<<endl;
    for (i=0; i<n+1; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<c[i][j];
            cout<<endl;
    }
}
//Просмотр матрицы с нулями по периметру
void show2 (int **b, int n, int m)
{
int i=0,j=0;
cout<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<b[i][j];
            cout<<endl;
    }
}
//Просмотр совмещенной матрицы
void show3 (int **a, int**d, int**e, int n, int m)
{
int i=0,j=0;
cout<<endl<<"Matr  1";
cout<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<a[i][j];
            cout<<endl;
    }
cout<<endl<<"Matr 2";
cout<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<e[i][j];
            cout<<endl;
    }


cout<<endl<<"Sovmeshennaia ";
cout<<endl;
    for (i=0; i<n+n; i++)
    {
        for (j=0; j<m; j++)
            cout<<'\t'<<d[i][j];
            cout<<endl;
    }
}
//Нахождение суммы элементов к-того столбца
void sum(int **a, int n, int m, int t, int k) //Входящий параметр матрица a и переменные размерности матрицы n,m
{
int i,j;
t=0;
cout<<endl<<"Enter k";
cin>>k;
    for (i=0; i<n; i++)
        t=t+a[i][k-1];

cout<<endl<<"Otvet:"<<t;
}
//Добавление стрки
void dob(int **a,int**&c, int n, int m)// Входящие: a,n,m. Исходящие c
{
int i=0,j=0,y=0;
cout<<endl<<"Enter stroky'"<<endl;
        for (i=0; i<n; i++)
            {
            for (j=0; j<m; j++)
                c[i][j]=a[i][j];}
                cout<<endl;
            for (j=0; j<m; j++)
            cin>>c[n][j];

}
//Установка нулей по периметру
void nol (int **a,int **&b, int n, int m)//Входящие a,n,m. Исходящие b.
{
int i=0,j=0;
b=new int*[n];
    for (i=0; i<n; i++)
        b[i]=new int[m];
        for (i=0; i<n; i++)
            {
            for (j=0; j<m; j++)
                b[i][j]=a[i][j];
            }
         for (i=0; i<n; i++)
            {
            for (j=0; j<m; j++)
                {
                b[0][j]=0;
                b[n-1][j]=0;
                b[i][0]=0;
                b[i][m-1]=0;
                }
              }

}
//Совмещение
void sovm (int **a,int **&d, int **&e,int n, int m)//Входящие a,n,m. Исходящие e и d.
{
int i=0,j=0,h=0,t=0;
d=new int*[n];
    for (i=0; i<n; i++)
        d[i]=new int[m];
e=new int*[n];
    for (i=0; i<m; i++)
        e[i]=new int[n];
randomize();
for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            e[i][j]=random(30);
    }

i=0;
{
for (h=0; h<n+n; h=h+2)
    {
    for (j=0; j<m; j++)
        d[h][j]=a[i][j]; i++;
    }
}
i=0;
{
for (h=1; h<n+n; h=h+2)
    {
    for (j=0; j<m; j++)
        d[h][j]=e[i][j]; i++;}

    }
}
Stiker вне форума Ответить с цитированием
Старый 09.12.2007, 21:38   #2
Stiker
 
Регистрация: 09.12.2007
Сообщений: 8
По умолчанию

Код:
Продолжение:. Запись/загрузка из файла и меню

//Запись в файл
char*fname()
{
char*s=new char[8];
cout<<endl;
cprintf("Enter filename-");
cin>>s; return s;
}
void save (char *fn, int**&a, int **&c, int **&d, int**&e, int &m, int &n)
{
int j,i;
fstream(f);
f.open(fn, ios::out);
f<<n<<' '<<m<<' ';
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f<<a[i][j]<<' ';
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f<<c[i][j]<<' ';
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f<<d[i][j]<<' ';
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f<<e[i][j]<<' ';
    }
}

f.close();
cout<<endl<<"File save";
}
//Чтение из файла
void load (char *fn, int**&a, int**&d, int**&e, int**&c, int &m, int &n)
{
int j,i;
fstream(f);
f.open (fn, ios::in);
f>>n>>m;
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f>>a[i][j];
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f>>c[i][j];
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f>>d[i][j];
    }
}
{
for (i=0; i<n; i++)
    {
    for (j=0; j<m; j++)
        f>>e[i][j];
    }
}
f.close();
cout<<endl<<"File load";
}
// Меню
void main()
{
int **my,**his,**our,**she,**he,n,m,i,j,t,k;

textcolor(9);
do
{
clrscr();
cout<<"Enter, 2-Show, 3-Summa, 4-Dobavlenie stroki,5-Ystanovka 0 po perimetry, 6-Sovmeshenie,  7-Save to file, 8-load , Esc-Exit";
switch(getch())
{
case '1':enter(my,n,m);break;
case '2':show(my,n,m);break;
case '3':sum(my,n,m,t,k);break;
case '4':dob(my,his,n,m); show1(his,m,n);break;
case '5':nol(my,our,n,m); show2(our,m,n);break;
case '6':sovm(my,she,he,n,m);show3(my,she,he,m,n);break;
case '7':save(fname(),my,she,he,our,n,m);break;
case '8':load(fname(),my,she,he,our,n,m); show(my,n,m);break;
case 27:exit(1);
}
getch();
}
while(1);
}
Stiker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программирование фамил Свободное общение 10 23.09.2009 14:28
модульное программирование Prestigio Общие вопросы C/C++ 2 28.06.2008 09:12
Программирование под .NET RoamingFire Свободное общение 1 04.03.2008 08:35
ПРограммирование Андрюха из ПХТТ Фриланс 3 04.02.2008 21:25
Модульное программирование на Паскале Alta Помощь студентам 1 29.01.2008 08:23