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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2013, 16:18   #1
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию Ошибка. Одномерные массивы C#

Всем добрый день.
Задание:
Цитата:
В одномерном массиве, состоящем из n вещественных элементов, Вычислить:
1) Минимальный элемент массива;
2) сумму элементов массива, расположенных между первым и последним положительным элементом.

Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные.
Ошибка собственно вот в чем
Цитата:
Сумму считает не верно, - 0 тоже является положительным числом.
Я не совсем понимаю как это исправить.

Спасибо за помощь
Код:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int itemsCount;
string str;
double[] Mas;
int a = 0;
int firstId = 0, lastId = 0;
bool foundFirstelement = false;
double Sum = 0;
//проверяем правильность ввода
do
{
Console.Clear();
Console.Write("Введите размерность массива: ");
str = Console.ReadLine();
} while (!int.TryParse(str, out itemsCount));
//создаем массив
Mas = new double[itemsCount];
//забиваем массив элементами и выводим их на экран
for (int i = 0; i < itemsCount; i++)
{
Mas[i] = rnd.Next(-10, 10);
Console.Write(Mas[i].ToString() + " ");
}
//поиск минимального элемента массива
double Min = a;
for (int i = 1; i < itemsCount; i++)
{
if (Mas[i] < Min)
{
Min = Mas[i];
}
}
//ищем позиции первого и последнего положительных элементов
for (int i = 0; i < itemsCount; i++)
{
if (Mas[i] > 0)
{
if (!foundFirstelement)
{
firstId = lastId = i;
foundFirstelement = true;
}
else
{
lastId = i;
}
}
}
//Находим сумму от первого до последнего
for (int i = firstId + 1; i < lastId; i++)
{
Sum += Mas[i];
}
Console.WriteLine();
//выводим результат рассчета
Console.WriteLine("Min= " + Min);
Console.WriteLine("Сумма = " + Sum.ToString());
for (int i = 0; i < Mas.Length; i++)
{
if (Mas[i] == 0)
{
for (int j = i; j > 0; j--)
{
Mas[j] = Mas[j - 1];
}
Mas[0] = 0;
}
}
Console.Write("Упорядоченный массив:\n");
foreach (int val in Mas)
Console.Write(val.ToString() + " ");
Console.ReadLine();
}
}
}
PROkaZZZniK вне форума Ответить с цитированием
Старый 28.02.2013, 16:24   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
0 тоже является положительным числом
Код:
if (Mas[i] >=0)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 28.02.2013, 16:48   #3
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

А почему сумму считает не верно?

Последний раз редактировалось PROkaZZZniK; 28.02.2013 в 17:17.
PROkaZZZniK вне форума Ответить с цитированием
Старый 28.02.2013, 17:13   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А почему сумму считает не верно?
Потому что для массива
Код:
-1 -3 0 -2 -4 6 9 7 -2 0 -2
Ваша программа (если в ней нет иных ошибок) получит ответ 22, а должно быть 14.
Abstraction вне форума Ответить с цитированием
Старый 06.03.2013, 22:57   #5
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int itemsCount;
            string str;
            double[] Mas;
            int a = 0;
            int firstId = 0, lastId = 0;
            bool foundFirstelement = false;
            double Sum = 0;
            //проверяем правильность ввода
            do
            {
                Console.Clear();
                Console.Write("Введите размерность массива: ");
                str = Console.ReadLine();
            } while (!int.TryParse(str, out itemsCount));
            //создаем массив
            Mas = new double[itemsCount];
            //забиваем массив элементами и выводим их на экран
            for (int i = 0; i < itemsCount; i++)
            {
                Mas[i] = rnd.Next(-10, 10);
                Console.Write(Mas[i].ToString() + " ");
            }
            //поиск минимального элемента массива
            double Min = a;
            for (int i = 1; i < itemsCount; i++)
            {
                if (Mas[i] < Min)
                {
                    Min = Mas[i];
                }
            }
            //ищем позиции первого и последнего положительных элементов
            for (int i = 0; i < itemsCount; i++)
            {
                if (Mas[i] >= 0)
                {
                    if (!foundFirstelement)
                    {
                        firstId = lastId = i;
                        foundFirstelement = true;
                    }
                    else
                    {
                        lastId = i;
                    }
                }
            }
            //Находим сумму от первого до последнего
            for (int i = firstId + 1; i < lastId; i++)
            {
                Sum += Mas[i];
            }
            Console.WriteLine();
            //выводим результат рассчета
            Console.WriteLine("Min= " + Min);
            Console.WriteLine("Сумма = " + Sum.ToString());
            for (int i = 0; i < Mas.Length; i++)
            {
                if (Mas[i] == 0)
                {
                    for (int j = i; j > 0; j--)
                    {
                        Mas[j] = Mas[j - 1];
                    }
                    Mas[0] = 0;
                }
            }
            Console.Write("Упорядоченный массив:\n");
            foreach (int val in Mas)
                Console.Write(val.ToString() + " ");
            Console.ReadLine();
        }
    }
}

Алгоритм нахождения минимального элемента массива выдает ошибки при вводите только положительных значений. Как исправить?
PROkaZZZniK вне форума Ответить с цитированием
Старый 07.03.2013, 00:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

a выкинуть совсем. напрочь.
минимальное искать так:
Код:
//поиск минимального элемента массива
            double Min = Mas[0];
            for (int i = 1; i < itemsCount; i++)
            {
                if (Mas[i] < Min)
                {
                    Min = Mas[i];
                }
            }
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Одномерные массивы. Fitch573 Помощь студентам 2 26.12.2011 18:58
Одномерные массивы Васильева Зинаида Помощь студентам 1 29.11.2010 10:14
ОДНОМЕРНЫЕ МАССИВЫ MaHTeP Общие вопросы C/C++ 5 11.10.2010 20:18
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12