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

Тема в разделе "C/C++/C#", создана пользователем 203, 7 май 2012.

  1. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. У меня возникла проблемам. Я написал код но он не очень красивы и я бы хотел попросить помощи у вас.
    Код
    Код (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
     
  2. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Вот ещё 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;
    }
     
  3. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    незнаю где ты смотришь у меня она работает

    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)
     
  4. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо.
     
  5. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Как решить эту программу при помощи "решить их нужно с использованием свободной памяти"? Помогите пожалуйста.
    Код (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;
    }
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    я ничего не понял. Попросите уточнить или переформулировать задание, пример тоже сойдет )
     
  7. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Вот есть задача Задание я её сделал код в сообщении № 5.
    Но теперь нужно сделать её с использованием свободной памяти. Помогите пожалуйста. Заранее спасибо.
     
  8. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    читай мой пост выше(№6) до прояснения.
     
  9. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    В моей программе пост №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;
    }
     
  10. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    поясни что такое свободная память? лучше ссылку на источник термина
     
  11. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Извиняйте я вас запутал. У меня динамическое распределение (выделение) свободной памяти то есть нету 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;
    }
     
  12. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    ошибок в добавленных строках не вижу, поясните что значит:
    как конкретно считает.
     
  13. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Извиняйте но сейчас проверяю и всё работает правильно. Извиняйте что запутал вас со своим кодом.

    Добавлено: Большое спасибо.
     
Загрузка...
Похожие Темы - Двумерные Числовые Массивы
  1. Rpp
    Ответов:
    1
    Просмотров:
    807
  2. Малгано
    Ответов:
    0
    Просмотров:
    1.287
  3. SchwarzeWolfin
    Ответов:
    3
    Просмотров:
    2.499
  4. 203
    Ответов:
    2
    Просмотров:
    2.168

Поделиться этой страницей