Двумерные Числовые Массивы

203

New Member
21.02.2012
2
0
#1
Здравствуйте. У меня возникла проблемам. Я написал код но он не очень красивы и я бы хотел попросить помощи у вас.
Код
C++:
#include <time.h>
#include <stdlib.h>
using namespace std;
void in_vvod(int a[8][8],int *m);
void in_v(int a[8][8],int m);
int in_fun(int a[8][8],int m, int *sum, int *k, int j);
int m;

void in_vvod(int a[8][8],int *m)
{
int i,j;
cout<<endl<<" m = ";
cin>>*m;
srand( (unsigned) time(NULL));//инициализация генератора случайный чисел
for (i=1; i<=*m; i++)
for (j=1; j<=*m; j++)
{

a[i][j]=int(rand()/(1.0*RAND_MAX)*(99+0)+0);
}

}

void in_v(int a[8][8],int m)
{
int i,j;
// Вывод матрицы
cout<<endl<<" The output matrix"<<endl;
for (i=1; i<=m; i++)
for (j=1; j<=m; j++)
if (j==m)cout<<a[i][j]<<"  "<<endl;
else cout<<a[i][j]<<"  ";
}

int in_fun(int a[8][8],int m, int *sum, int *k, int j)
{
int i;

*sum=0;
*k=0;
for (i=1; i<=m; i++)
if (a[i][j]>9 && (a[i][j]%10==a[i][j]/10))
{
*k=*k+1;
*sum+=a[i][j];
}

return 0;

}

int main()
{
int i,j;
int sum,k;
int a[8][8];

in_vvod(a, &m);
in_v(a, m);
for (j=1; j<=m; j++)
{
in_fun(a, m, &sum, &k, j);
cout<<" Col "<<j<<"  k= "<<k<<" summa= "<<sum<<endl; 
}

system("pause");
return 0;
}
Мне сказали что в коде есть какая то ошибка, но я не знаю какая. У меня не получается объявить a[8][8] в константу что бы не писать её всегда. Помогите пожалуйста. Заранее спасибо.
Вот условие если нужно.
Без_имени_2.jpg
 

203

New Member
21.02.2012
2
0
#2
Вот ещё 1 код. Но там тоже проблема, программа должа видеть числа только 11 22 33 44 55 и т.д а она ещё видит и 0 10 20 30 40 и т.д. Как это исправить.
C++:
// 111.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "time.h"

using namespace std;

int input()
{
int m=10;
while ((m>7)||(m<1)) {cout<<"m= :";cin>>m;}

return m;
}

void form_mass(int** mass,int &m)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
mass[i][j]=rand()%99;
}
}
}

void summ_mass(int** mass,int** mas,int &m)
{

for (int j=0; j<m; j++)
{	
mas[j][0]=0; mas[j][1]=0;
for (int i=0; i<m; i++)
{
int a,b;
a=mass[i][j]/10;
b=mass[i][j]%10;
if (b==a) {mas[j][0]++; mas[j][1] = mas[j][1] + mass[i][j];}
}
}
}

void output(int** mass, int** mas,int &m)
{
cout<<"mas"<<endl;
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
cout<<mass[i][j]<<"\t";
}
cout<<endl;
}
cout<<endl;
cout<<"stol "<<"			k "<<"			 sum "<<endl;
for (int i=0; i<m; i++)
{
cout<<" "<<i<<"			 "<<mas[i][0]<<"			 "<<mas[i][1]<<endl;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
srand ((unsigned) time(NULL));
int m;
m=input();

int** mass;
mass = new int* [m];
for (int i=0; i<m; i++)
{
mass[i] = new int [m];
}

form_mass(&mass[0],m);
int** mas;
mas = new int* [m];
for (int i=0; i<m; i++)
{
mas[i] = new int [2];
}
summ_mass(&mass[0],&mas[0],m);
output(&mass[0],&mas[0],m);
getch();
return 0;
}
 

Whatka

Well-Known Member
09.10.2011
428
4
#3
незнаю где ты смотришь у меня она работает

m= :7
mas
37 12 30 39 87 28 55
71 45 60 48 2 6 94
76 79 8 12 60 17 49
75 79 4 18 79 30 74
1 60 73 0 77 48 49
73 54 0 8 76 66 44
18 66 77 4 11 6 14

stol k sum
0 0 0
1 1 66
2 2 77
3 1 0
4 2 88
5 1 66
6 2 99
Для продолжения нажмите любую клавишу . . .



вот только 0 тоже считает
но это просто исправить
if (b==a)&&(b!=0)
 

203

New Member
21.02.2012
2
0
#4
Как решить эту программу при помощи "решить их нужно с использованием свободной памяти"? Помогите пожалуйста.
C++:
// 111.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "time.h"

using namespace std;

int input()
{
int m=10;
while ((m>7)||(m<1)) {cout<<"m= :";cin>>m;}

return m;
}

void form_mass(int** mass,int &m)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
mass[i][j]=rand()%99;
}
}
}

void summ_mass(int** mass,int** mas,int &m)
{

for (int j=0; j<m; j++)
{	
mas[j][0]=0; mas[j][1]=0;
for (int i=0; i<m; i++)
{
int a,b;
a=mass[i][j]/10;
b=mass[i][j]%10;
if (b==a) && (b!=0) {mas[j][0]++; mas[j][1] = mas[j][1] + mass[i][j];}
}
}
}

void output(int** mass, int** mas,int &m)
{
cout<<"mas"<<endl;
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
cout<<mass[i][j]<<"\t";
}
cout<<endl;
}
cout<<endl;
cout<<"stol "<<"			k "<<"			 sum "<<endl;
for (int i=0; i<m; i++)
{
cout<<" "<<i<<"			 "<<mas[i][0]<<"			 "<<mas[i][1]<<endl;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
srand ((unsigned) time(NULL));
int m;
m=input();

int** mass;
mass = new int* [m];
for (int i=0; i<m; i++)
{
mass[i] = new int [m];
}

form_mass(&mass[0],m);
int** mas;
mas = new int* [m];
for (int i=0; i<m; i++)
{
mas[i] = new int [2];
}
summ_mass(&mass[0],&mas[0],m);
output(&mass[0],&mas[0],m);
getch();
return 0;
}
 
R

rrrFer

Гость
#5
Как решить эту программу при помощи "решить их нужно с использованием свободной памяти"? Помогите пожалуйста.
я ничего не понял. Попросите уточнить или переформулировать задание, пример тоже сойдет )
 

203

New Member
21.02.2012
2
0
#6
Вот есть задача Задание я её сделал код в сообщении № 5.
Но теперь нужно сделать её с использованием свободной памяти. Помогите пожалуйста. Заранее спасибо.
 

203

New Member
21.02.2012
2
0
#8
В моей программе пост №5 используется динамическое распределение (выделение), а нужно переделоть под delete[]...
Вот написал вреде как проверьте пожалуйста. (не проверяйте работает неверно)
C++:
#include "iostream"
#include "conio.h"
#include "time.h"

using namespace std;

int input()
{
int m=10;
while ((m>7)||(m<1)) {cout<<"Input 0<M<=7 :";cin>>m;}

return m;
}

void form_mass(int** mass,int &m)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
mass[i][j]=rand()%99;
}
}
}

void summ_mass(int** mass,int** mas,int &m)
{

for (int j=0; j<m; j++)
{	
mas[j][0]=0; mas[j][1]=0;
for (int i=0; i<m; i++)
{
int a,b;
a=mass[i][j]/10;
b=mass[i][j]%10;

if ((b+a)%2==0) {mas[j][0]++; mas[j][1] = mas[j][1] + mass[i][j];}
}
}
}

void output(int** mass, int** mas,int &m)
{
cout<<"Massiv"<<endl;
for (int i=0; i<m; i++)
{
for (int j=0; j<m; j++)
{
cout<<mass[i][j]<<"\t";
}
cout<<endl;
}
cout<<endl;
cout<<"Rezultat"<<endl;
cout<<"stolbec"<<"  kolichestvo chisel"<<"  summa"<<endl;
for (int i=0; i<m; i++)
{
cout<<" "<<i<<"			 "<<mas[i][0]<<"			 "<<mas[i][1]<<endl;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
srand ((unsigned) time(NULL));
int m;
m=input();

int** mass;
mass = new int* [m];
for (int i=0; i<m; i++)
{
mass[i] = new int [m];
}

form_mass(&mass[0],m);
int** mas;
mas = new int* [m];
for (int i=0; i<m; i++)
{
mas[i] = new int [2];
}
summ_mass(&mass[0],&mas[0],m);
output(&mass[0],&mas[0],m);
for (int i=0; i<m; i++) delete[] mass[i];
delete[]mass;
for (int i=0; i<m; i++) delete[] mas[i];
delete[]mas;
getch();
return 0;
}
Добавил
C++:
for (int i=0; i<m; i++) delete[] mass[i];
delete[]mass;
for (int i=0; i<m; i++) delete[] mas[i];
delete[]mas;
Заранее спасибо.

Добавлено: Но после этого программа считает неправильно.
Вот пример
C++:
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>

// Определение функции для создания матрицы с помощью ГСЧ
void matrix_create(int n, int m, int** matr)
{	srand((unsigned) time(0));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
matr[i][j]=rand()%15; //Значения элементов от 0 до 14
}

int main()
{	int **pint; 	// Указатель на указатель int
int n,m,i,j;

cout << "Vvedite n,m -> "; 
cin >> n >> m; // Ввод количества строк (n) и столбцов (m) в матрице

pint=new int*[n]; // Создание вспомогательного массива указателей

//Формируем строки матрицы как одномерные массивы
for(i=0; i<n; i++) {pint[i]=new int[m];} 

matrix_create(n,m,pint);

cout << "\nSformirovana MATRIX:\n";
for(i=0; i<n; i++) 
{
for(j=0; j<m; j++) cout << "\t" << pint[i][j];
cout << endl;
}

// Удаление i-ой строки матрицы
for(i=0; i<n; i++) delete[] pint[i]; 

// Удаление вспомогательного массива указателей
delete[] pint; 

return 0;
}
 
R

rrrFer

Гость
#9
В моей программе пост №5 используется динамическая память, а мне нужно использовать свободную.
поясни что такое свободная память? лучше ссылку на источник термина
 

203

New Member
21.02.2012
2
0
#10
Извиняйте я вас запутал. У меня динамическое распределение (выделение) свободной памяти то есть нету delete[]... она выделяет динамически но не удаляется(вроде так). Нужно программу сделать с delete.

Добавлено: Это пример
C++:
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>

// Определение функции для создания матрицы с помощью ГСЧ
void matrix_create(int n, int m, int** matr)
{	srand((unsigned) time(0));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
matr[i][j]=rand()%15; //Значения элементов от 0 до 14
}

int main()
{	int **pint;	 // Указатель на указатель int
int n,m,i,j;

cout << "Vvedite n,m -> "; 
cin >> n >> m; // Ввод количества строк (n) и столбцов (m) в матрице

pint=new int*[n]; // Создание вспомогательного массива указателей

//Формируем строки матрицы как одномерные массивы
for(i=0; i<n; i++) {pint[i]=new int[m];} 

matrix_create(n,m,pint);

cout << "\nSformirovana MATRIX:\n";
for(i=0; i<n; i++) 
{
for(j=0; j<m; j++) cout << "\t" << pint[i][j];
cout << endl;
}

// Удаление i-ой строки матрицы
for(i=0; i<n; i++) delete[] pint[i]; 

// Удаление вспомогательного массива указателей
delete[] pint; 

return 0;
}
 

203

New Member
21.02.2012
2
0
#12
Извиняйте но сейчас проверяю и всё работает правильно. Извиняйте что запутал вас со своим кодом.

Добавлено: Большое спасибо.