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му рядку потрібно використати перевірку умови, можливо це не так, в будь-якому випадку надіюся на вашу допомогу.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

2

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

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

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

x

3

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

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

Білий Лунь

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

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

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

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

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

Білий Лунь

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

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

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

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

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

  3 2 1
  5 4 3
  7 6 5

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

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

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

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

x

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

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

Chemist-i написав:

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

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

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

8

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

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

Білий Лунь

9

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

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

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

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

Вигляд

4 2 1
7 5 3
9 8 6
"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

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]
Програма вище реалізує цей метод.
Зробіть щось для форуму, порадьте його друзям або напишіть корисну статтю.

Білий Лунь
Подякували: Logans1

11 Востаннє редагувалося Logans (22.11.2013 01: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]
Програма вище реалізує цей метод.
Зробіть щось для форуму, порадьте його друзям або напишіть корисну статтю.

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

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

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

Подякували: Logans, Ярослав2

13

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

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

14

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

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

andri1006bat написав:

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

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

HetmanNet написав:
Не ображайся, але ми не любимо халявщіків, тож..
Вангую.. вангую.. хуйню чую... коду не бачу.. тож хрін знає що передбачу...
Because tomorrow may be gone.
Подякували: 0xDADA11C71