1

Тема: Двовимірний Масив

Вечір добрий.

Питання стосується двохвимірного масиву, а точніше, його виводу.

Задачою передбачено ввід розміру симетричного двохвимірного масиву. Потрібно вивести його в такому вигладі:

Якщо розмір 3:
   4 2 1
   7 5 3
   9 8 6

Ось код програми з якою на даний момент я працюю:

Прихований текст
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main()
{
    int mas[100][100];
    int i,f,j,n,p;

    cout << "Vvedite n=";
    cin >> n;

    p = 0;
    for (i = 0 ; i < n ; i++)
    {
        cout << endl;

        for (j = n ; j > 0 ; j--)
        {
            for (f = 0 ; f < n ; f++)
                mas[i][j] = i * f + j;

            cout << " " << mas[i][j] << " ";
        };
    };
    cout << endl;
    getch();
    return 0;
}

Судячи з моїх спроб, визначення де саме є помилка, я прийшов до висновку, що в 24му рядку потрібно використати перевірку умови, можливо це не так, в будь-якому випадку надіюся на вашу допомогу.

2

Re: Двовимірний Масив

for (f = 0 ; f < n ; f++)
                mas[i][j] = i * f + j;

А навіщо взагалі це?

3

Re: Двовимірний Масив

Яку помилку ви отримуєте при компілюванні?

4 Востаннє редагувалося Ярослав (21.11.2013 22:29:35)

Re: Двовимірний Масив

Chemist-i написав:
for (f = 0 ; f < n ; f++)
                mas[i][j] = i * f + j;

А навіщо взагалі це?

Заповнює масив

5 Востаннє редагувалося Logans (21.11.2013 22:31:04)

Re: Двовимірний Масив

Ярослав написав:

Яку помилку ви отримуєте при компілюванні?

Ой вибачте, забув вказати. Помилки немає, просто заповнює з таким виглядом:

  3 2 1
  5 4 3
  7 6 5

6 Востаннє редагувалося Chemist-i (21.11.2013 22:31:23)

Re: Двовимірний Масив

Стосовно виводу, є збочення з setConsolePos(), в цьому випадку можна обійтись. Представте, що у вас є цифри із стандартною кількістю порядків, наприклад 3-го порядку: 999, 123, 548. А менші виводяться як 001 чи 065, і зробіть функцію, що додає попереду нулі, а потім просто замініть їх пробілами, і буде те, що Вас треба.

7 Востаннє редагувалося Logans (21.11.2013 22:35:54)

Re: Двовимірний Масив

Chemist-i написав:

Стосовно виводу, є збочення з setConsolePos(), в цьому випадку можна обійтись. Представте, що у вас є цифри із стандартною кількістю порядків, наприклад 3-го порядку: 999, 123, 548. А менші виводяться як 001 чи 065, і зробіть функцію, що додає попереду нулі, а потім просто замініть їх пробілами, і буде те, що Вас треба.

Дякую вам за відповідь, але використання таких засобів, саме на цьому рівні моїх знань, не підходить для мене.
Викладачем була чітко поставлена задача, "виконати по пройденому матерілу", цього, нажаль, в нас не було.

8

Re: Двовимірний Масив

Я скомпілював ваш код, трохи змінивши його, у мене вивелась матриця, я не розумію, що у вас не працює.

9

Re: Двовимірний Масив

Ярослав написав:

Я скомпілював ваш код, трохи змінивши його, у мене вивелась матриця, я не розумію, що у вас не працює.

Вивелась саме в такому вигляді як потрібно?

Вигляд

4 2 1
7 5 3
9 8 6

10

Re: Двовимірний Масив

Ось код:

#include <cstdlib>
#include <iostream>

using namespace std;
     
int main(){
    int array[5][5];
    int i, j, d1, d2, m, n;
    int z;
     
    cout << "Vvedite z=";
    cin >> z;

    
    for(m = 0, n = z; n > 0; n--){
        m += n;
    }
    cout << "m = " << m << '\n';
    
    i = 0;    
    j = z;
    n = z*z;
    while(i < n){
        if(i < m){
            j--;
            d1 = j;
            d2 = 0;
            while(d1 < z){
                array[d2][d1] = i+1;
                d1++;
                d2++;
                i++;
            }
        } else {
            j++;
            d1 = 0;
            d2 = j;
            while(d2 < z){
                array[d2][d1] = i+1;
                d1++;
                d2++;
                i++;
            }
        } 
    }
    for(i = 0; i < z; i++){
        for(j = 0; j < z; j++){
            cout << array[i][j] << "\t";
        }
        cout<< '\n';
    }
    
    return 0;
}

Метод працює так
i змінюється від 0 до n в квадраті, тобто якщо n = 3, то i буде 0, 1, ..., 8
Матриця заповнюється порядковими числами 1, 2, ... починаючи від правого верхнього елементу і по діагоналям до лівого нижнього.
Щоб це зробити потрібно для матриці 3х3 заповнювати елементи матриці в такому порядку:
[0][2]
[0][1] [1][2]
[0][0] [1][1] [2][2]
[1][0] [2][1]
[2][0]
Програма вище реалізує цей метод.
Зробіть щось для форуму, порадьте його друзям або напишіть корисну статтю.

11 Востаннє редагувалося Logans (22.11.2013 00:36:09)

Re: Двовимірний Масив

Ярослав написав:

Ось код:

Прихований текст
#include <cstdlib>
#include <iostream>

using namespace std;
     
int main(){
    int array[5][5];
    int i, j, d1, d2, m, n;
    int z;
     
    cout << "Vvedite z=";
    cin >> z;

    
    for(m = 0, n = z; n > 0; n--){
        m += n;
    }
    cout << "m = " << m << '\n';
    
    i = 0;    
    j = z;
    n = z*z;
    while(i < n){
        if(i < m){
            j--;
            d1 = j;
            d2 = 0;
            while(d1 < z){
                array[d2][d1] = i+1;
                d1++;
                d2++;
                i++;
            }
        } else {
            j++;
            d1 = 0;
            d2 = j;
            while(d2 < z){
                array[d2][d1] = i+1;
                d1++;
                d2++;
                i++;
            }
        } 
    }
    for(i = 0; i < z; i++){
        for(j = 0; j < z; j++){
            cout << array[i][j] << "\t";
        }
        cout<< '\n';
    }
    
    return 0;
}

Метод працює так
i змінюється від 0 до n в квадраті, тобто якщо n = 3, то i буде 0, 1, ..., 8
Матриця заповнюється порядковими числами 1, 2, ... починаючи від правого верхнього елементу і по діагоналям до лівого нижнього.
Щоб це зробити потрібно для матриці 3х3 заповнювати елементи матриці в такому порядку:
[0][2]
[0][1] [1][2]
[0][0] [1][1] [2][2]
[1][0] [2][1]
[2][0]
Програма вище реалізує цей метод.
Зробіть щось для форуму, порадьте його друзям або напишіть корисну статтю.

Дякую, обов'язково пораджу друзям) (я не майстер статті писати, але спробую).

12

Re: Двовимірний Масив

1. Цей масив не симетричний. Ось приклади симетричного масиву:
1 2 3     1 2 1
4 5 2     3 4 3
6 4 1     5 6 5
А ваш масив - несиметричний.
2. Питання стосується не виведення масиву, а його заповнення. З виведенням проблема теж є, але основна проблема - з заповненням масиву.
3. Ярослав правильно описав шлях, але код давайте трохи простіше зробимо:

  int element = 0;//який елемент вставляємо
  for( int i = 0; i < n; ++i ) //номер рядка, з якого починаємо заповнювати діагональ
    for( int j = 0; j < i + 1; ++j ) //номер елемента на діагоналі, починаючи знизу
      mas[ i - j ][ n - j - 1 ] = ++element;
  for( int i = n - 2; i >= 0; --i) //номер стовпчика, з якого починаємо заповнювати діагональ
    for( int j = 0; j < i + 1; ++j ) //номер елемента на діагоналі, починаючи знизу
      mas[ n - j - 1 ][ i - j ] = ++element;

http://ideone.com/3BODhb

Подякували: Logans2

13

Re: Двовимірний Масив

Допоможіть будь-ласка з написанням програми в dev c++
Умова така:Підрахувати кількість слів що містять k-голосних літер(k вводиться з клавіатури)
Буду дуже вдячний ))))

14

Re: Двовимірний Масив

Відповідь для вас №2

andri1006bat написав:

Допоможіть будь-ласка з написанням програми в dev c++
Умова така:Підрахувати кількість слів що містять k-голосних літер(k вводиться з клавіатури)
Буду дуже вдячний ))))

1. Створюйте окрему тему для вашого запитання.
2. Які у вас виникли проблеми? Є якісь напрацювання?
3. Здається, ви маєте на увазі не "допоможіть", а "зробіть за мене". То що тутешнім програмістам буде, крім вашої вдячності?
Як писав один видатний співфорумець:

HetmanNet написав:
Не ображайся, але ми не любимо халявщіків, тож..

Вангую.. вангую.. хуйню чую... коду не бачу.. тож хрін знає що передбачу...

Подякували: 0xDADA11C71