Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
lRem

Массивы, матрицы и операции с ними

04.05.2013, 03:49. Показов 1899. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток уважаемые программисты.
Не большое отступление:
В универе (заочное отделение) наверное считают что человек способен за пару лекций выучить
язык программирования и написать курсовую.
Сколько я не пытался разобраться сам, ничего не получается, наверное потому что я работаю не много
в другой сфере (ЛВС и ГВС) и работа руководящая.
Когда то в далеком прошлом 4 года учили в техникуме борланд делфи.
Логика и синтаксис отличается и видимо поэтому я не могу не как понять Cи.
Но сроки поджимают и я вынужден обратиться к Вам за помощью.
Надеюсь на Вашу помощь.
И так, задание:
В матрице произвольного размера подсчитать количество отрицательных элементов в каждой строке,
из полученных величин составить вектор.
Преподаватель так же добавил:
Матрица должна заполняться из файла и в конце записывать в файл объект (я так понимаю в бинарном коде).

Нашел код, подобного задания. Код довольно сложный, он выводит абсолютно всю матрицу с файла, это определенно хорошо.
Но нам такого не объясняли и врятли я смогу объяснить преподователя.
Сначало нужно указать матрицу (5:4 например) и файл должен заполнен матрицей именно этого размера. Но думаю попробую разобраться в коде и все таки объяснить
преподователю. Все же не удобно все время подгонять матрицу в файле и потом задавать ее размер в консоле, намного проще если программа будет сама выводить всю матрицу с текстовика.
С файла матрицу считает, это уже хорошо.
Программа в консоле c#.
Возможно и в форме, но у нас даже лекций по работе с формами не было.
Вот код программы, которой я нашел на форуме:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.IO;
 
namespace ConsoleApplication
{
    class Class
    {
        static int[,] Input(out int n)
        {
            StreamReader file = new StreamReader("c:/t.txt");
            string s = file.ReadToEnd();
            file.Close();
            string[] строка = s.Split('\n');
            string[] столбец = строка[0].Split(' ');
            int[,] a = new int[строка.Length, столбец.Length];
            int t = 0;
            n = 0;
            for (int i = 0; i < строка.Length; i++)
            {
                столбец = строка[i].Split(' ');
                for (int j = 0; j < столбец.Length; j++)
                {
                    t = Convert.ToInt32(столбец[j]);
                    a[i, j] = t;
                    //Console.Write(" {0}", a[i, j]);
                }
                //Console.WriteLine();
            }
 
            return a;
        }
 
        static void Print(int[,] a)
        {
            for (int i = 0; i < a.GetLength(0); ++i, Console.WriteLine())
                for (int j = 0; j < a.GetLength(1); ++j)
                    Console.Write("{0} ", a[i, j]);
        }
 
        static double Rezalt(int[,] a)
        {
            int k = 0;
            double s = 0;
            for (int i = 0; i < a.GetLength(0); ++i)
                for (int j = i + 1; j < a.GetLength(1); ++j)
                    if (a[i, j] % 2 != 0) { ++k; s += a[i, j]; }
            if (k != 0) return s / k;
            else return 0;
        }
 
        static void Main()
        {
            try
            {
                int n;
                int[,] myArray = Input(out n);
                Console.WriteLine("Исходный массив:");
                Print(myArray);
                double rez = Rezalt(myArray);
                Console.WriteLine("Среднее арифметическое ={0:f2}", rez);
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine(" Файл не найден");
            }
            catch (FormatException)
            {
                Console.WriteLine(" Неверное значение данных");
            }
            catch (IndexOutOfRangeException)
            {
                Console.WriteLine(" Выход за границы массива");
            }
 
        }
    }
}
Если можно с комментариями.
Заранее всех благодарю за помощь.

Добавлено через 9 часов 12 минут
Ап теме
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2013, 03:49
Ответы с готовыми решениями:

Двумерные массивы и операции с ними
Ввести двумерный массив размером 5*5 с клавиатуры. Вывести массив на экран в виде таблицы. Для введенного массива определить: 1)...

Двумерные массивы, операции над ними
Всем, здравствуйте! Набрала текст программы на паскале, но ответ выводит неправильно. Не могу понять, что такое - программу не раз...

Матрицы и операции над ними
Подскажите, как сформировать вектор из диагональных элементов матрицы.

2
212 / 214 / 44
Регистрация: 20.12.2011
Сообщений: 635
04.05.2013, 04:56
Лучший ответ Сообщение было отмечено как решение

Решение

как-то так(ниже малость комментариев, по делу и не только):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите имя файда: ");
            string fileName = Console.ReadLine();
            if (File.Exists(fileName))              //проверка существования файла
            {
                StreamReader sr = new StreamReader(fileName);   //создание нового потока для чтения
                Regex r = new Regex("\n\r");                    //регулярное выражение для разбиения файла на строки
                string[] Lines = r.Split(sr.ReadToEnd());       //чтение всего файла и разбиение на строки с помощью регулярки
                sr.Close();                                     //закрытие потока
                int[,] arr = new int[Lines.Length, Lines[0].Split(' ').Length];
                int[] result = new int[Lines.Length];
                for (int i = 0; i != Lines.Length; i++)         //обход матрицы
                {
                    result[i] = 0;                              //количество отрицательных элементов i-ой строки
                    string[] tmp = Lines[i].Split(' ');         //разбиение строки на элементы
                    for (int j = 0; j != tmp.Length; j++)
                    {
                        arr[i, j] = int.Parse(tmp[j]);          //преобразование к числу
                        if (arr[i, j] < 0)                      //если отрицательный, то увеличиваем количество
                        {
                            result[i]++;
                        }
                    }
                }
                //запись результата в файл
                Console.Write("Введите имя файла для записи результата: ");
                fileName = Console.ReadLine();
                StreamWriter sw = new StreamWriter(fileName);
                for (int i = 0; i != result.Length; i++)
                {
                    sw.Write(result[i] + " ");
                }
                sw.Close();
            }
            else
            {
                Console.WriteLine("Входной файл не найден!");
            }
            Console.WriteLine("Нажмите любую клавишу...");
            Console.ReadKey(true);
        }
    }
}
Данный код, просит ввести имя файла для чтения матрицы, затем читает весь файл и дробит его на строки. Количество строк в файле - количество строк матрицы, количество чисел в первой строке - количество столбцов. Другие варианты не обработаются.

Цитата Сообщение от lRem Посмотреть сообщение
Матрица должна заполняться из файла и в конце записывать в файл объект (я так понимаю в бинарном коде).
объясните, с чего Вы взяли, что именно в бинарном виде...
если из-за слова объект, то любой массив является объектом => я думаю, что Вам нужно вывести в файл массив(вектор) результатов

Не по теме:


ну а тут не по делу:

Цитата Сообщение от lRem Посмотреть сообщение
Когда то в далеком прошлом 4 года учили в техникуме борланд делфи.
Логика и синтаксис отличается и видимо поэтому я не могу не как понять Cи.
как говорил один хороший человек: "время изучения нового языка = время, требуемое, чтобы дотянуться до клавиши F1 или открытия документации"


Цитата Сообщение от lRem Посмотреть сообщение
Сколько я не пытался разобраться сам, ничего не получается, наверное потому что я работаю не много
в другой сфере (ЛВС и ГВС) и работа руководящая.
может и не мое дело, но не проще было бы заплатить кому-нибудь за эту работу?



Добавлено через 18 минут
P.S. если будет непонятен код, или вообще возникнут вопросы по изучению(только конкретные), то пишите или в личку или по контактам из подписи - помогу.
P.S.S. просьбы сделать какое-либо задание буду игнорить
0
lRem
16.05.2013, 02:37
Народ хелп.

Программу почти доделали.
Но я не правильно понял задание,
нужно что бы, по каждой строке искались отрицательные элементы и количество отрицательных элементов выводилось на экран и записывалось в xml файл с помощью сериализации.
Тобишь дана матрица (считалась с файла *.txt):

1 2 -3 4 5
1 2 -3 -4 5
1 2 -3 4 -5
1 2 3 4 5 6

________________
1 2 2 0

Причем сколько строк в матрице изначально не понятно, можно ввести с клавиатуры, но можно и что бы он сам сначала считал сколько строк в матрице.

Вот код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
using System.IO;
using System.Text.RegularExpressions;
 
namespace Turkin
{
    [Serializable]
    public class A
    {
 
        public string Title;
        double[][] MatrixPole;//Поле матрица
 
        public double[][] MatrixProperty
        {
            get { return MatrixPole; }
            set { MatrixPole = value; }
        }
        int[] vector;// Поле вектор
 
        public int[] VectorProperty
        {
            get { return vector; }
            set { vector = value; }
        }
        //конструктор
        public A()
        {
            LoadFromFile();
            vector = MatrixVector(MatrixPole);
        }
 
        public double ПолучитьЭлементМатрицы(int StrokaNumber, int StolbecNumber)
        {
            return MatrixPole[StrokaNumber][StolbecNumber];
        }
        // Вывод многомерного массива на экран
        static public void MatrixShow(double[][] MassParam)
        {
            foreach (double[] X in MassParam)
            {
                foreach (double Value in X)
                {
                    Console.Write(Value + "\t");
                }
                Console.WriteLine();
            }
        }
        //Метод - Вывод одномерного массива на экран
        static public void MatrixShow(int[] MassParam)
        {
            foreach (int Value in MassParam)
            {
                Console.Write(Value + "\t");
            }
        }
        //Выбираем все отрицательные
        //возвращаем вектор
        int[] MatrixVector(double[][] MassParam)
        {
            int i = 0;
            string S = "";
            string[] Mass;
 
            /*Выбираем все отрицательные из многомерного массива
            и записываем в строку S
            i - кол-во найденных элементов, подходящим условию 
             */
            foreach (double[] X in MassParam)
            {
                foreach (double Value in X)
                {
                    if (Value < 0)
                    {
                        S += Value + " ";
                        i++;
                    }
                }
            }
            vector = new int[i];
            S = S.Trim();
            Mass = S.Split(' ');
            for (i = 0; i > Mass.Length; i++)
            {
                vector[i] = (int)Convert.ToDouble(Mass[i]);
            }
            return vector;
        }
 
        //Метод считываем матрицу из файла
        public void LoadFromFile()
        {
            try
            {
                StreamReader fs = new StreamReader("primer.txt");
 
                //Массив строк из файла, разделимых новой строкой
                string[] StringOfFile = fs.ReadToEnd().Split('\n');
                int i = 0;
                string[] NumForString; /*массив чисел полученных из строки, после
                обработки */
 
               FormatingMatrixStringArray(ref StringOfFile);//Удаляем пустые строки
                // лишние символы В Массиве строк матрицы
 
                MatrixPole = new double[StringOfFile.Length][];
 
                foreach (string X in StringOfFile)
                {
                    NumForString = X.Split(' ');
                    MatrixPole[i] = new double[NumForString.Length];
                    for (int j = 0; j < NumForString.Length; j++)
                    {
                        MatrixPole[i][j] = Convert.ToDouble(NumForString[j]);
                    }
                    i++;
                }
                fs.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Erorr!!! " + e.ToString());
            }
        }
 
         protected void FormatingMatrixStringArray(ref string[] StringOfFile)
         {
             int CountRealStrings = 0;// количество непустых строк, содержащих цифровое
             // значение
             int i = 0;
             foreach (string X in StringOfFile)
             {
                 
 
                 if (StringOfFile[i] != "")
                 {
                     StringOfFile[CountRealStrings] = StringOfFile[i];
                     CountRealStrings++;
                 }
                 i++;
             }
             Array.Resize(ref StringOfFile, CountRealStrings);
         }
    }
      
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Чтение матрицы из файла:\n");
            A ob = new A();
            A.MatrixShow(ob.MatrixProperty);
            Console.WriteLine();
 
            Console.WriteLine("------------------------------------------|");
            Console.WriteLine("Отрицательные элементы в матрице:");
            A.MatrixShow(ob.VectorProperty);
            Console.WriteLine("\n");
            Console.WriteLine("------------------------------------------|");
 
            Console.WriteLine("Сохранение результата в XML:\n");
            A.MatrixShow(ob.MatrixProperty);
            ob.Title = "Матрица";
            System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(A));
            System.IO.StreamWriter file = new System.IO.StreamWriter(@"matriza.xml");
 
            writer.Serialize(file, ob);
            file.Close();
 
            System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(A));
            System.IO.StreamReader file2 = new System.IO.StreamReader(@"matriza.xml");
            A outt = new A();
            outt = (A)reader.Deserialize(file2);
            file2.Close();
 
            Console.WriteLine();
 
            Console.ReadKey();
 
        }
    }
}
Он читает с файла txt выводит на экран матрицу, и выводит вектор (считает отрицательные числа всей матрицы и выводит на экран нули), т.е. в матрице три отрицательных числа, выведет программа три 0 и запишет в файл xml

Великие гуру c#, пересдача через несколько часов, хелп.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2013, 02:37
Помогаю со студенческими работами здесь

Матрицы, массивы и работа с ними
Доброго времени суток. Помогите сделать следующие задания 1)Сформировать и вывести на печать массив P(20), элементы которого заданы в...

Объясните, что такое разреженные матрицы, как их генерировать и математические операции над ними
Скажите, пожалуйста, правильно ли я думаю. На сколько я понял разряженная матрица - это матрица вроде этой: 1000 0011 0100 1001 ...

Деревья и операции с ними
нужно создать и отобразить на форме структуру типа &quot;дерево&quot; с возможностью выполнять операции над ним (добавление элемента в определенную...

Системы счисления и операции с ними
Здравствуйте! Заинтересовал вопрос - насколько сложно сделать калькулятор для подсчетов в разных системах счисления?... Например, (...

Высказывания и операции над ними
Пол ночи голову ломал, ничего не понял... 1. Высказывание (X&amp;Y) v (X-&gt;Z) ложно. Найдите все возможные значения высказываний (x,y,z) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru