Автор |
Сообщение |
xALEKSx
[7.9]
|
0
помогите с прогой плз!)
ребята помогите решить школьную задачку по программированию на с# (в консольных приложениях) для теста матрица такая: -1 -2 2 1 ср. арифм=1.875 это до 3 10 1 1
а после типо должно стать так: 1 2 2 1 ср. арифм 2.625 3 10 1 1 и все это должно вводиться и выводиться на экран. заранее спс тем кто откликнется
|
17 окт 2011, 17:18 |
|
|
Xarty
|
0
помогите с прогой плз!)
не проходил с#, его синтаксиса не знаю, но могу объяснить что делать. Поскольку в условии задано, что это максимальное кол-во отрицательных элементов находятся в первой строке, то в цикле for пробегаешь по всем элементам первой строки и присваиваешь им значения их модулей. (наверное что-то вроде arr[1][i]=abs(arr[1][i]), где "1" - это номер строки, "i" - "счётчик" цикла for (он будет меняться от первого элемента, до последнего), abs функции которая берёт модуль от числа. По крайне мере так она называется в c++, думаю в с# должна быть такая же. Среднее арифметическое считаешь также, только там будет цикл в цикле. (два цикла for один в другом). Суммируешь все элементы и делишь получившееся число на кол-во элементов
|
17 окт 2011, 17:45 |
|
|
xALEKSx
[7.9]
|
0
помогите с прогой плз!)
Xarty писал(а): не проходил с#, его синтаксиса не знаю, но могу объяснить что делать. Поскольку в условии задано, что это максимальное кол-во отрицательных элементов находятся в первой строке, то в цикле for пробегаешь по всем элементам первой строки и присваиваешь им значения их модулей. (наверное что-то вроде arr[1][i]=abs(arr[1][i]), где "1" - это номер строки, "i" - "счётчик" цикла for (он будет меняться от первого элемента, до последнего), abs функции которая берёт модуль от числа. По крайне мере так она называется в c++, думаю в с# должна быть такая же. Среднее арифметическое считаешь также, только там будет цикл в цикле. (два цикла for один в другом). Суммируешь все элементы и делишь получившееся число на кол-во элементов
еще нужно перед этим определить в какой строке больше всего отрицательных элементов. и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(
|
17 окт 2011, 18:02 |
|
|
Cmeex
[6.5]
|
0
помогите с прогой плз!)
xALEKSx писал(а): еще нужно перед этим определить в какой строке больше всего отрицательных элементов. и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(
распиши все этапы на отдельном листочке, раздели их на пункты. А затем реализуй последовательно. Я на первом курсе так делал
|
17 окт 2011, 18:07 |
|
|
sai
[0.2]
|
0
помогите с прогой плз!)
xALEKSx писал(а): еще нужно перед этим определить в какой строке больше всего отрицательных элементов. и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(
Можно создать однострочный массив, кол-во элементов в котором будет равно кол-ву строк в твоей матрице, например arr_x[a]. Пишешь цикл в цикле(первый увеличивает значение индекса строки на 1, второй увеличивает значение индекса столбца), который будет производить проверку на отрицательный элемент в строке arr[a][b], и при выполнении условия, добавлять +1 к соответствующему элементу arr_x[a]. Ну и ещё один цикл, в котором ты будешь сравнивать по очереди элементы arr_x, и присваивать какойто промежуточной переменной(например "c") номер элемента массива который оказался большим по значению. Значение "c" и будет номером нужной строки. Вроде так.
|
17 окт 2011, 19:21 |
|
|
Tremere
[7.6]
<Черёмуха>
Сервер: Страж Смерти
2х2: 1484
3х3: 96
|
0
помогите с прогой плз!)
Синтаксис я не помню абсолютно + не буду расписывать процедуры ввода, вывода, обьявения переменных итд. Набросаю тебе идею, может, поможет for i=1 to n //двигаемся по строкам for j=1 to m //двигаемся по столбикам { if mas[i,j] <0 //если элемент матрицы отрицательный { count1++; //увеличиваем счетчик отрицательных элементов cтроки if i = 1; count2 = count1; //запоминаем куда-то количество отрицательных элементов в первой строке } if count 1 < count 2 goto metka; // если в какой-то строке отрицательных элементов больше чем в 1й, то сразу идем в конец проги } тут пишем все остальные действия - среднее арифм, модуль итд Metka: тут пишем окончание проги(прыгаем сюда, если в 1й строке не больше всего отрицательных.
|
17 окт 2011, 19:30 |
|
|
Esh
|
0
помогите с прогой плз!)
Написал быстренько, коменты есть если не разберешься пиши.Я понял задачу так что макс значение отриц элементов в 1ой строке подразумевает что все элементы первой строки отрицательны, потому что если бы хотели что бы мы сравнили с другими строками то так бы и было написано. Скрытый текст using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication3 { class Program { static void Main(string[] args) {
int i, j; i = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo strok matrici j = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo stolbcov double[,] Matrica = new double [i,j]; for (int k = 0; k < i; k++)//zapolnyaem matricu { for (int d = 0; d < j; d++) { Matrica[k, d] = Convert.ToDouble(Console.ReadLine()); } }
for (int k = 0; k < i; k++)//Vivodim na ekran ishodnuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d]+" "); } }
double MatricaSr=0;// obyavlaem sr arifm for (int k = 0; k < i; k++)//schitaem sr arifm do preobrazovaniya
{
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d])/(i*j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm do preobrazovaniya
Console.ReadLine();
int t=0; for (int d = 0; d < j; d++)// schitaem kol-vo otic elem-ov pervoi stroki { if (Matrica[0, d] < 0) { t = t + 1; } } if (t == j)// esli kol-vo elem-ov ravno kol-vo elem-ov stroki to mi imeem max znachenie otric elm-ov v pervoi stroke { for (int k = 0; k < i; k++)//esli uslovie udovletvoreno to pereschitivaem matricu {
for (int d = 0; d < j; d++) { if (Matrica[k, d] < 0) { Matrica[k, d] = (Matrica[k, d] * (-1));
} } } for (int k = 0; k < i; k++)//Vivodim na ekran novuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d] + " "); } }
for (int k = 0; k < i; k++)//schitaem sr arifm posle preobrazovaniya {
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d]) / (i * j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm posle preobrazovaniya
} else Console.WriteLine("Первая строка имеет не макс значение отрицательных элементов");
Console.ReadLine(); } }
}
Добавлено спустя 1 минуту 12 секунд:Tremere ЕРЕТИК!!!! GOTO ИЗЫДИ!
|
17 окт 2011, 19:34 |
|
|
Tremere
[7.6]
<Черёмуха>
Сервер: Страж Смерти
2х2: 1484
3х3: 96
|
0
помогите с прогой плз!)
Цитата: Tremere ЕРЕТИК!!!! GOTO ИЗЫДИ!
Не было условия не юзать что-то з.ы Красавчик, что помог. Мне было бы лень весь код писать
|
17 окт 2011, 19:37 |
|
|
Desst
[0.6]
|
0
помогите с прогой плз!)
мой препод за goto на кол сразу сажал btw, условие задачи, по традиции, написано криво... Esh писал(а): Я понял задачу так что макс значение отриц элементов в 1ой строке подразумевает что все элементы первой строки отрицательны, потому что если бы хотели что бы мы сравнили с другими строками то так бы и было написано.
имхо, как раз имеется ввиду второе :) P.S. wtf is "среднее арифметическое всей матрицы"? с.а. всех ее элементов?
|
17 окт 2011, 19:46 |
|
|
Esh
|
1
помогите с прогой плз!)
Вот второй вариант , сравнивается колво отриц элем-ов в первой строке с кол-вом отриц элем-ов в других строках. Скрытый текст using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication3 { class Program { static void Main(string[] args) {
int i, j; i = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo strok matrici j = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo stolbcov double[,] Matrica = new double[i, j]; for (int k = 0; k < i; k++)//zapolnyaem matricu { for (int d = 0; d < j; d++) { Matrica[k, d] = Convert.ToDouble(Console.ReadLine()); } }
for (int k = 0; k < i; k++)//Vivodim na ekran ishodnuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d] + " "); } }
double MatricaSr = 0;// obyavlaem sr arifm for (int k = 0; k < i; k++)//schitaem sr arifm do preobrazovaniya {
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d]) / (i * j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm do preobrazovaniya
Console.ReadLine();
int t = 0; for (int d = 0; d < j; d++)// schitaem kol-vo otic elem-ov pervoi stroki { if (Matrica[0, d] < 0) { t = t + 1; } } int l = 0; int p = 0; for (int k = 1; k < i; k++) for (int d = 0; d < j; d++)// schitaem kol-vo otric elem-ov drugih strok { if (Matrica[0, d] < 0) { p = p + 1;
} if (t > p)// sravnivaem kol-vo otric elem-ov pervoi i ostalnih strok esli v 1oi bolshe to mi pribavlyaem edenicu v premennuy { l = l + 1; }
}
if (l == i-1)// esli kol-vo strok u kotorih menshe otric elem-ov ravno obshemu kol-vu strok minus odna(1ya) nachinaetsya cikl { for (int k = 0; k < i; k++)//esli uslovie udovletvoreno to pereschitivaem matricu {
for (int d = 0; d < j; d++) { if (Matrica[k, d] < 0) { Matrica[k, d] = (Matrica[k, d] * (-1));
} } } for (int k = 0; k < i; k++)//Vivodim na ekran novuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d] + " "); } }
for (int k = 0; k < i; k++)//schitaem sr arifm posle preobrazovaniya {
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d]) / (i * j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm posle preobrazovaniya
} else Console.WriteLine("Первая строка имеет не макс значение отрицательных элементов");
Console.ReadLine(); } }
}
|
17 окт 2011, 20:20 |
|
|
xALEKSx
[7.9]
|
0
помогите с прогой плз!)
Esh писал(а): Написал быстренько, коменты есть если не разберешься пиши.Я понял задачу так что макс значение отриц элементов в 1ой строке подразумевает что все элементы первой строки отрицательны, потому что если бы хотели что бы мы сравнили с другими строками то так бы и было написано. Скрытый текст using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication3 { class Program { static void Main(string[] args) {
int i, j; i = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo strok matrici j = Convert.ToInt32(Console.ReadLine());//vvodim kol-vo stolbcov double[,] Matrica = new double [i,j]; for (int k = 0; k < i; k++)//zapolnyaem matricu { for (int d = 0; d < j; d++) { Matrica[k, d] = Convert.ToDouble(Console.ReadLine()); } }
for (int k = 0; k < i; k++)//Vivodim na ekran ishodnuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d]+" "); } }
double MatricaSr=0;// obyavlaem sr arifm for (int k = 0; k < i; k++)//schitaem sr arifm do preobrazovaniya
{
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d])/(i*j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm do preobrazovaniya
Console.ReadLine();
int t=0; for (int d = 0; d < j; d++)// schitaem kol-vo otic elem-ov pervoi stroki { if (Matrica[0, d] < 0) { t = t + 1; } } if (t == j)// esli kol-vo elem-ov ravno kol-vo elem-ov stroki to mi imeem max znachenie otric elm-ov v pervoi stroke { for (int k = 0; k < i; k++)//esli uslovie udovletvoreno to pereschitivaem matricu {
for (int d = 0; d < j; d++) { if (Matrica[k, d] < 0) { Matrica[k, d] = (Matrica[k, d] * (-1));
} } } for (int k = 0; k < i; k++)//Vivodim na ekran novuy matricu { Console.WriteLine(); for (int d = 0; d < j; d++) { Console.Write(Matrica[k, d] + " "); } }
for (int k = 0; k < i; k++)//schitaem sr arifm posle preobrazovaniya {
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d]) / (i * j); } } Console.WriteLine(); Console.WriteLine(MatricaSr);//vivodim sr arifm posle preobrazovaniya
} else Console.WriteLine("Первая строка имеет не макс значение отрицательных элементов");
Console.ReadLine(); } }
}
спс , ток не правильно считает ср. арифм и насчет условия, вроде как просто в первой строке должно быть больше отриц чем в остальных, но после вас перечитал еще раз задачу и понял что в принципе можно и так понять, слово как обычно за преподом :( Добавлено спустя 1 минуту 29 секунд:Desst писал(а): P.S. wtf is "среднее арифметическое всей матрицы"? с.а. всех ее элементов?
ну да это типо всё в кучу и аое всё сложить и разделить на количество) Добавлено спустя 21 минуту 48 секунд:вот так правильно считает for (int k = 0; k < i; k++)//schitaem sr arifm do preobrazovaniya {
for (int d = 0; d < j; d++) { MatricaSr = (MatricaSr + Matrica[k, d]); } MatricaSr = MatricaSr / (i * j); } вот так правильно считает в первой матрице, а во второй просто сделал еще одну переменную
|
17 окт 2011, 20:50 |
|
|
Tremere
[7.6]
<Черёмуха>
Сервер: Страж Смерти
2х2: 1484
3х3: 96
|
0
помогите с прогой плз!)
выше написали уже
|
17 окт 2011, 21:16 |
|
|
Свуй
[24.3]
|
0
помогите с прогой плз!)
Массивы для школоты.
Заюзай всякий LINQ и побольше дженериков и лямбда выражений с рефлекшонами.
Убей преподу мозг.
|
17 окт 2011, 21:54 |
|
|
Desst
[0.6]
|
0
помогите с прогой плз!)
класс вектор для топ пацанов
|
18 окт 2011, 09:49 |
|