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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 20:56   #1
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию Передача двумерного массива в функцию

Почему то после передачи массива в функцию, каждый его элемент становится нулём. Подскажите, правильно ли я передаю массив????
Код:
namespace Laba3z2
{
    public partial class Form1 : Form
    {
        int m, n,poz,date;
        public Form1()
        {
            InitializeComponent();
        }
        private int sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
        {
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    sd.Text = sd.Text + Convert.ToString(massiv[j, i]);
                }
            }
                int[,] mas_per = new int[m_m, n_n];
                for (int i = 0; i < n_n - sdvig + 1; i++)
                {
                    for (int j = 0; j < m_m; j++)
                    {
                        mas_per[j, i] = massiv[j, i + sdvig];
                        if (i == (n_n - sdvig))
                        {
                            for (i = 0; i < sdvig; i++)
                            {
                                for (j = 0; j < m_m; j++)
                                {
                                    mas_per[j, i + n_n - sdvig] = massiv[j, i];
                                }
                            }
                        }
                    
                }
                }
                return mas_per[m_m, n_n];
            }
        
        private void sdvig_v_Click(object sender, EventArgs e)
        {
            m = Convert.ToInt32(razm_m.Text);
            n = Convert.ToInt32(razm_n.Text);
            poz = Convert.ToInt32(sdvig.Text);
            razm_m.Enabled = false;
            razm_n.Enabled = false;
            sdvig.Enabled = false;
            sdvig_v.Enabled = false;
            rand.Enabled = true;
            elem.Enabled = true;
            elem_v.Enabled = true;

        }

        private void elem_v_Click(object sender, EventArgs e)
        {
            int[,] mas = new int[m, n];
            int[,] mas_sd = new int[m, n];
            Random r = new Random();
            if (rand.Checked == true)
            {
                for (int j = 0; j < n; j++)
                {
                    if (j != 0 && j != n)
                    {
                        ish.Text = ish.Text+ Environment.NewLine;
                    }
                    for (int i = 0; i < m; i++)
                    {
                        
                       mas[i,j] = r.Next(0,10);
                       ish.Text += Convert.ToString(mas[i, j])+"  ";
                       if (j == n)
                       {
                           mas_sd[m,n] = sdvig_mas(mas,poz,m,n);
                           
                       }
                    }
                }
            //  for (int i = 0; i < n; i++)
              //  {
                 //   for (int j = 0; j < n; j++)
                   // {
                  //      sd.Text =sd.Text+ Convert.ToString(mas_sd[j, i]);
                  //  }
               // }
                 rand.Enabled = false;
                 elem.Enabled = false;
                 elem_v.Enabled = false;

            }
            else
            {

            }
        }

        private void rand_CheckedChanged(object sender, EventArgs e)
        {
            if (rand.Checked == true)
            {
                elem.Enabled = false;
            }
            else
            {
                elem.Enabled = true;
            }
        }

    }
}
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 29.10.2010, 21:12   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

А у тебя вообще функция работает? Ну студия не выдаёт ошибку? У тебя функция возвращает не массив, а одно число типа int
Casper-SC вне форума Ответить с цитированием
Старый 29.10.2010, 21:53   #3
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Массив передаёшь правильно. Пересмотри работу алгоритма.
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Старый 29.10.2010, 22:04   #4
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Как правильно? Если функция возвращает не массив, а число типа int. У него это вообще компилироваться не должно.

Вот тоже самое, что у него, только во много раз проще. Видите функция возвращает двумерный массив? Тут всё работает. Или я может просто чего то не понял? Просто читать тот код как-то сложно.
Код:
    public partial class Form1 : Form
    {
        int[,] array = new int[5, 5];
        
        public Form1()
        {
            InitializeComponent();
            array[0, 0] = 4;
            array[1, 0] = 1;
            array[2, 0] = 7;
            array[3, 0] = 8;
            array[0, 4] = 9;
        }

        public int[,] newArray(int[,] array)
        {
            int[,] arr = array; //все значения переданы

            array = new int[7, 7];
            array[0, 0] = 5;
            array[1, 0] = 5;
            array[2, 0] = 5;
            array[3, 0] = 5;
            array[4, 0] = 5;
            array[0, 1] = 5;
            array[0, 2] = 5;
            array[0, 3] = 5;
            array[0, 4] = 5;
            return array;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[,] ArrayTwo = newArray(array); //тут функция вернёт новый массив
        }
    }

Это:
Код:
      private int sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
Смени на это:
Код:
      private int[,] sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)

Последний раз редактировалось Casper-SC; 29.10.2010 в 22:11.
Casper-SC вне форума Ответить с цитированием
Старый 29.10.2010, 23:34   #5
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Цитата:
Сообщение от Casper-SC Посмотреть сообщение
Как правильно? Если функция возвращает не массив, а число типа int. У него это вообще компилироваться не должно.

Вот тоже самое, что у него, только во много раз проще. Видите функция возвращает двумерный массив? Тут всё работает. Или я может просто чего то не понял? Просто читать тот код как-то сложно.
Код:
    public partial class Form1 : Form
    {
        int[,] array = new int[5, 5];
        
        public Form1()
        {
            InitializeComponent();
            array[0, 0] = 4;
            array[1, 0] = 1;
            array[2, 0] = 7;
            array[3, 0] = 8;
            array[0, 4] = 9;
        }

        public int[,] newArray(int[,] array)
        {
            int[,] arr = array; //все значения переданы

            array = new int[7, 7];
            array[0, 0] = 5;
            array[1, 0] = 5;
            array[2, 0] = 5;
            array[3, 0] = 5;
            array[4, 0] = 5;
            array[0, 1] = 5;
            array[0, 2] = 5;
            array[0, 3] = 5;
            array[0, 4] = 5;
            return array;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[,] ArrayTwo = newArray(array); //тут функция вернёт новый массив
        }
    }

Это:
Код:
      private int sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
Смени на это:
Код:
      private int[,] sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
Ты меня правильно понял, ошибка действительно глупая, оплошал маленько )))) а компилятор ошибку не выдал, только вот почему то опять ничего не выводит(((((
Код:
namespace Laba3z2
{
    public partial class Form1 : Form
    {
        int m, n,poz,date;
        public Form1()
        {
            InitializeComponent();
        }
        private int[,] sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
        {
            for (int i = 0; i < n_n; i++)
            {
                for (int j = 0; j < m_m; j++)
                {
                    sd.Text = sd.Text + Convert.ToString(massiv[j, i]);
                }
            }
                int[,] mas_per = new int[m_m, n_n];
                for (int i = 0; i < n_n - sdvig + 1; i++)
                {
                    for (int j = 0; j < m_m; j++)
                    {
                        mas_per[j, i] = massiv[j, i + sdvig];
                        if (i == (n_n - sdvig))
                        {
                            for (i = 0; i < sdvig; i++)
                            {
                                for (j = 0; j < m_m; j++)
                                {
                                    mas_per[j, i + n_n - sdvig] = massiv[j, i];
                                }
                            }
                        }
                    
                }
                }
                return mas_per;
            }
        
        private void sdvig_v_Click(object sender, EventArgs e)
        {
            m = Convert.ToInt32(razm_m.Text);
            n = Convert.ToInt32(razm_n.Text);
            poz = Convert.ToInt32(sdvig.Text);
            razm_m.Enabled = false;
            razm_n.Enabled = false;
            sdvig.Enabled = false;
            sdvig_v.Enabled = false;
            rand.Enabled = true;
            elem.Enabled = true;
            elem_v.Enabled = true;

        }

        private void elem_v_Click(object sender, EventArgs e)
        {
            int[,] mas = new int[m, n];
            Random r = new Random();
            if (rand.Checked == true)
            {
                for (int j = 0; j < n; j++)
                {
                    if (j != 0 && j != n)
                    {
                        ish.Text = ish.Text+ Environment.NewLine;
                    }
                    for (int i = 0; i < m; i++)
                    {
                        
                       mas[i,j] = r.Next(0,10);
                       ish.Text += Convert.ToString(mas[i, j])+"  ";
                       if (j == n)
                       {
                           int[,] mas_sd = sdvig_mas(mas,poz,m,n);
                           
                       }
                    }
                }
                 rand.Enabled = false;
                 elem.Enabled = false;
                 elem_v.Enabled = false;

            }
            else
            {

            }
        }

        private void rand_CheckedChanged(object sender, EventArgs e)
        {
            if (rand.Checked == true)
            {
                elem.Enabled = false;
            }
            else
            {
                elem.Enabled = true;
            }
        }

    }
}
Винда, KIS 2010, книжка по С/С++, остальное неважно........

Последний раз редактировалось StudentPolitech; 30.10.2010 в 00:02.
StudentPolitech вне форума Ответить с цитированием
Старый 30.10.2010, 01:29   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Выложи проект. Я гляну. По коду вообще ничего не понятно. Названия компонентов или что там. Именуй правильно всё. ish.Text - подозреваю, что это текстбокс, тогда хотя бы так назвал: textBoxIsh. Понимаешь так врятли помогут, просто из кода ничего толком не ясно. И не охота разбираться. Меня жёско путают переменные с непонятными названиями. Или просто из-за отсутствия подсветки кода?

И если выложишь, то объясни, что вообще по идее программа делать должна.

Последний раз редактировалось Casper-SC; 30.10.2010 в 01:39.
Casper-SC вне форума Ответить с цитированием
Старый 30.10.2010, 18:22   #7
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Casper-SC спасибо за ответы действительно сейчас все компилируется, просто вчера много раз перекомпилировал программы поэтому VS 2010 начил тупить, и неправильно компилить(((((( Задание у меня вот такое:
Составить программу, которая получает матрицу Х размерностью m*n и целое число К. Программа формирует новую матрицу, осуществив циклический сдвиг всех строк исходной матрицы вверх К раз.
Комментарии написать я не смог, поэтому извиняйте за нечитабельный код.
Я все практически написал, осталось пара мелочей (ограничение ввода некоторых символов при РУЧНОМ вводе в textbox). Выкладываю рабочий код, на всякий случай, если кому то когда нить понадобиться )))))
ЗЫ Casper-SC проект я тож выложил
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 30.10.2010, 18:59   #8
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Куда выложил? Несколько раз пересмотрел все посты.
Casper-SC вне форума Ответить с цитированием
Старый 30.10.2010, 22:18   #9
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Форум почему то недоступен был(((((( хотя инет у меня работал, вот код,проект только VS2010:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Laba3z2
{
    public partial class Form1 : Form
    {
        int m, n,poz;
        public Form1()
        {
            InitializeComponent();
        }
        private void razm_m_Validating(object sender, CancelEventArgs e)
        {
            TextBox tb = (sender as TextBox);

            try
            {
                int value = Convert.ToInt32(tb.Text);
                string value2=tb.Text;
                if (value < 0)
                {
                    e.Cancel = true;
                    info.Text = "Введите положительное число";
                }
                if (value2 == "")
                {
                    info.Text = "Не оставляйте поле пустым!!!!";
                }
            }
            catch
            {
                info.Text = "Неверное значение";
            }
        }
        private void razm_n_Validating(object sender, CancelEventArgs e)
        {
            TextBox tb = (sender as TextBox);

            try
            {
                int value = Convert.ToInt32(tb.Text);

                if (value < 0)
                {
                    e.Cancel = true;
                    info.Text = "Введите положительное число";
                }
            }
            catch
            {
                info.Text = "Неверное значение";
            }
        }
        private void sdvig_Validating(object sender, CancelEventArgs e)
        {
            TextBox tb = (sender as TextBox);

            try
            {
                int value = Convert.ToInt32(tb.Text);

                if (value < 0)
                {
                    e.Cancel = true;
                    info.Text = "Введите положительное число";
                }
            }
            catch
            {
                info.Text = "Неверное значение";
            }
        }
        private int[,] sdvig_mas(int[,] massiv, int sdvig, int m_m, int n_n)
        {
            while (sdvig > n_n)
            {
                sdvig -= n_n;
            }
                int[,] mas_per = new int[m_m, n_n];
                for (int j = 0; j < n_n - sdvig; j++)
                {
                    for (int i = 0; i < m_m; i++)
                    {
                        mas_per[i, j] = massiv[i, j + sdvig];    
                }
                }
                for (int j = 0; j < sdvig; j++)
                {
                    for (int i = 0; i < m_m; i++)
                    {
                        mas_per[i, j + n_n - sdvig] = massiv[i, j];
                    }
                }
                return mas_per;
            }
        
        private void sdvig_v_Click(object sender, EventArgs e)
        {
            m = Convert.ToInt32(razm_m.Text);
            n = Convert.ToInt32(razm_n.Text);
            poz = Convert.ToInt32(sdvig.Text);
            razm_m.Enabled = false;
            razm_n.Enabled = false;
            sdvig.Enabled = false;
            sdvig_v.Enabled = false;
            rand.Enabled = true;
            elem.Enabled = true;
            elem_v.Enabled = true;
            info.Text = "Введите " + m * n + " элемент (-а, -ов) (через пробел)";
            ish.Text = "";
            sd.Text = "";
        }

        private void elem_v_Click(object sender, EventArgs e)
        {
            int[,] mas = new int[m, n];
            Random r = new Random();
            if (rand.Checked == true)
            {
                for (int j = 0; j < n; j++)
                {
                    if (j != 0 && j != n)
                    {
                        ish.Text = ish.Text + Environment.NewLine;
                    }
                    for (int i = 0; i < m; i++)
                    {

                        mas[i, j] = r.Next(0, 10);
                        ish.Text += Convert.ToString(mas[i, j]) + "  ";
                    }
                }
Вложения
Тип файла: rar Laba3z2.rar (46.5 Кб, 9 просмотров)
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 30.10.2010, 22:20   #10
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Код:
int[,] mas_sd = sdvig_mas(mas, poz, m, n);
                for (int j = 0; j < n; j++)
                {
                    if (j != 0 && j != n)
                    {
                        sd.Text = sd.Text + Environment.NewLine;
                    }
                    for (int i = 0; i < m; i++)
                    {
                        sd.Text = sd.Text + Convert.ToString(mas_sd[i, j]) + "  ";
                    }
                }
                info.Text = "Сдвинуто на " + poz + " позицию (-и, -й)";
                razm_m.Enabled = true;
                razm_n.Enabled = true;
                sdvig.Enabled = true;
                sdvig_v.Enabled = true;
                rand.Enabled = false;
                elem.Enabled = false;
                elem_v.Enabled = false;
                razm_m.Text = "";
                razm_n.Text = "";
                sdvig.Text = "";
            }
            else
            {
                try
                {
                    string stroka = elem.Text;
                    string[] mas_prom = stroka.Split(new Char[] { ' ' });
                    int k = -1;
                    for (int j = 0; j < n; j++)
                    {
                        for (int i = 0; i < m; i++)
                        {
                            k++;
                            mas[i, j] = Convert.ToInt32(mas_prom[k]);
                        }
                    }
                    for (int j = 0; j < n; j++)
                    {
                        if (j != 0 && j != n)
                        {
                            ish.Text = ish.Text + Environment.NewLine;
                        }
                        for (int i = 0; i < m; i++)
                        {
                            ish.Text += Convert.ToString(mas[i, j]) + "  ";
                        }
                    }
                    int[,] mas_sd = sdvig_mas(mas, poz, m, n);
                    for (int j = 0; j < n; j++)
                    {
                        if (j != 0 && j != n)
                        {
                            sd.Text = sd.Text + Environment.NewLine;
                        }
                        for (int i = 0; i < m; i++)
                        {
                            sd.Text = sd.Text + Convert.ToString(mas_sd[i, j]) + "  ";
                        }
                    }
                    info.Text = "Сдвинуто на " + sdvig + " позиций";
                    razm_m.Enabled = true;
                    razm_n.Enabled = true;
                    sdvig.Enabled = true;
                    sdvig_v.Enabled = true;
                    rand.Enabled = false;
                    elem.Enabled = false;
                    elem_v.Enabled = false;
                    info.Text = "";
                    razm_m.Text = "";
                    razm_n.Text = "";
                    sdvig.Text = "";
                }

                catch (System.IndexOutOfRangeException)
                {
                    info.Text = "Введите "+m*n+"!!! элементов";
                }
            }
        }

        private void rand_CheckedChanged(object sender, EventArgs e)
        {
            if (rand.Checked == true)
            {
                elem.Enabled = false;
            }
            else
            {
                elem.Enabled = true;
            }
        }
    }
}
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача в функцию двумерного массива структур Spandei Общие вопросы C/C++ 1 21.05.2010 01:11
Передача двумерного массива в функцию Megapixar Общие вопросы C/C++ 12 01.04.2010 16:04
Передача двумерного динамического массива в метод Дырдин Общие вопросы C/C++ 1 19.03.2010 09:45
Передача двумерного массива аля матрицы из функции bondik Общие вопросы C/C++ 1 20.05.2009 15:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08