помогите с прогой плз!)  
Автор Сообщение

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
Профиль

0
Сообщение помогите с прогой плз!)
не проходил с#, его синтаксиса не знаю, но могу объяснить что делать.
Поскольку в условии задано, что это максимальное кол-во отрицательных элементов находятся в первой строке, то в цикле for пробегаешь по всем элементам первой строки и присваиваешь им значения их модулей. (наверное что-то вроде arr[1][i]=abs(arr[1][i]), где "1" - это номер строки, "i" - "счётчик" цикла for (он будет меняться от первого элемента, до последнего), abs функции которая берёт модуль от числа. По крайне мере так она называется в c++, думаю в с# должна быть такая же.
Среднее арифметическое считаешь также, только там будет цикл в цикле. (два цикла for один в другом). Суммируешь все элементы и делишь получившееся число на кол-во элементов


17 окт 2011, 17:45
Профиль Skype

0
Сообщение помогите с прогой плз!)
Xarty писал(а):

не проходил с#, его синтаксиса не знаю, но могу объяснить что делать.
Поскольку в условии задано, что это максимальное кол-во отрицательных элементов находятся в первой строке, то в цикле for пробегаешь по всем элементам первой строки и присваиваешь им значения их модулей. (наверное что-то вроде arr[1][i]=abs(arr[1][i]), где "1" - это номер строки, "i" - "счётчик" цикла for (он будет меняться от первого элемента, до последнего), abs функции которая берёт модуль от числа. По крайне мере так она называется в c++, думаю в с# должна быть такая же.
Среднее арифметическое считаешь также, только там будет цикл в цикле. (два цикла for один в другом). Суммируешь все элементы и делишь получившееся число на кол-во элементов

еще нужно перед этим определить в какой строке больше всего отрицательных элементов.
и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(


17 окт 2011, 18:02
Профиль

0
Сообщение помогите с прогой плз!)
xALEKSx писал(а):

еще нужно перед этим определить в какой строке больше всего отрицательных элементов.
и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(

распиши все этапы на отдельном листочке, раздели их на пункты. А затем реализуй последовательно. Я на первом курсе так делал


17 окт 2011, 18:07
Профиль

0
Сообщение помогите с прогой плз!)
xALEKSx писал(а):

еще нужно перед этим определить в какой строке больше всего отрицательных элементов.
и хотелось бы увидеть именно код, потому что на словах то я примерно могу сказать че делать, а вот когда пытаюсь написать код у меня сразу ступор(

Можно создать однострочный массив, кол-во элементов в котором будет равно кол-ву строк в твоей матрице, например arr_x[a].
Пишешь цикл в цикле(первый увеличивает значение индекса строки на 1, второй увеличивает значение индекса столбца), который будет производить проверку на отрицательный элемент в строке arr[a][b], и при выполнении условия, добавлять +1 к соответствующему элементу arr_x[a].
Ну и ещё один цикл, в котором ты будешь сравнивать по очереди элементы arr_x, и присваивать какойто промежуточной переменной(например "c") номер элемента массива который оказался большим по значению.
Значение "c" и будет номером нужной строки.
Вроде так.


17 окт 2011, 19:21
Профиль



<Черёмуха>


Сервер: Страж Смерти
2х2: 1484
3х3: 96
0
Сообщение помогите с прогой плз!)
Синтаксис я не помню абсолютно + не буду расписывать процедуры ввода, вывода, обьявения переменных итд. Набросаю тебе идею, может, поможет :D

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
Профиль

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
Профиль



<Черёмуха>


Сервер: Страж Смерти
2х2: 1484
3х3: 96
0
Сообщение помогите с прогой плз!)
Цитата:

Tremere ЕРЕТИК!!!! GOTO ИЗЫДИ!

Не было условия не юзать что-то :D

з.ы Красавчик, что помог. Мне было бы лень весь код писать :good


17 окт 2011, 19:37
Профиль

0
Сообщение помогите с прогой плз!)
мой препод за goto на кол сразу сажал :D

btw, условие задачи, по традиции, написано криво...
Esh писал(а):

Я понял задачу так что макс значение отриц элементов в 1ой строке подразумевает что все элементы первой строки отрицательны, потому что если бы хотели что бы мы сравнили с другими строками то так бы и было написано.

имхо, как раз имеется ввиду второе :)

P.S. wtf is "среднее арифметическое всей матрицы"? с.а. всех ее элементов?


17 окт 2011, 19:46
Профиль

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
Профиль

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();
}
}

}



спс :angel: , ток не правильно считает ср. арифм
и насчет условия, вроде как просто в первой строке должно быть больше отриц чем в остальных, но после вас перечитал еще раз задачу и понял что в принципе можно и так понять, слово как обычно за преподом :(

Добавлено спустя 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
Профиль



<Черёмуха>


Сервер: Страж Смерти
2х2: 1484
3х3: 96
0
Сообщение помогите с прогой плз!)
выше написали уже


17 окт 2011, 21:16
Профиль

0
Сообщение помогите с прогой плз!)
Массивы для школоты.

Заюзай всякий LINQ и побольше дженериков и лямбда выражений с рефлекшонами.

Убей преподу мозг.


17 окт 2011, 21:54
Профиль

0
Сообщение помогите с прогой плз!)
класс вектор для топ пацанов


18 окт 2011, 09:49
Профиль
Начать новую тему Ответить на тему


Перейти:  

На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru