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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2017, 00:14   #1
levkoz
 
Регистрация: 15.02.2017
Сообщений: 6
По умолчанию Функции C#

Необходимо при помощи функций решить три задания: • сумму элементов массива с нечетными номерами;
• сумму элементов массива, расположенных между первым и последним отрицательными элементами;
• сжать массив, удалив из него все элементы, модуль которых не превышает 1. Что освободились в конце массива элементы заполнить нулями.
Я написала немного, но у меня возникли проблемы, если кто может, помогите.
Код:
using System;
using System.Linq;

namespace INDZ
{
    class Program
    {
        public static int[] arr;
        public static int[] arr_1;

        private static void func2(ref int value)
        {
            arr = new int[] { -7, 3, 8, -3, 5, -4, 9 };
            arr_1 = new int[7];

            int number = 0;
            string t = number.ToString();
            Console.Write("Ввести номер действия:"); // можно
            t = Console.ReadLine();
            if (false)
            {
                return;               // не проблема, у value остаётся старое значение
            }
            number = Int32.Parse(t);
            if (number == 1)// Отделение и суммирование всех нечётных элементов
            {
                for (int u = 0; u < arr.Length; ++u)
                {
                    if (arr[u] % 2 != 0)
                    {

                        arr_1[u] = arr[u];
                        Console.Write(arr_1[u] + " , ");
                    }
                }
                Console.Write("\n" + arr_1.Sum());
            }
            if (number == 2)
            {
                Func<int, bool> cond = x => x >= 0;
                arr = arr.SkipWhile(cond).Reverse().SkipWhile(cond).Reverse().ToArray();
                //  arr.SkipWhile(x => x >= 0).Skip(1).Reverse().SkipWhile(x => x >= 0).Skip(1).Reverse().ToArray();

                for (int u = 0; u < arr.Length; ++u)
                {
                    arr_1[u] = arr[u];
                    Console.Write(arr_1[u] + " , ");
                }
                Console.Write("\n" + "Сумма:" + arr_1.Sum());
                Console.ReadLine();
            }

Последний раз редактировалось Вадим Мошев; 15.02.2017 в 06:21.
levkoz вне форума Ответить с цитированием
Старый 15.02.2017, 00:43   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Расскажи по подробней о задании:
1) Это работа - лаба, расчётка, курсач? Сроки какие у тебя?
2) ввод массивова какой? пользователь должет вводит или задаётся в программе? Или надо предусмотреть и то и то?
3) тебе надо писать в отдельных функциях, а у тебя как? Через "if"?
4) Что это такое:
Код:
Func<int, bool> cond = x => x >= 0;
arr = arr.SkipWhile(cond).Reverse().SkipW hile(cond).Reverse().ToArray();
и тебе можно использовать библиотеки или надо всё сделать собственно ручными алгоритмами, т.е. использовать только примитивы (for, if....)
5) А где точка входа программу? Ну вот, например, я создал пустой проект:

10.jpg
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 00:56   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вы изучали только массивы?
А "List<int>" ничего не говорит?
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 01:08   #4
levkoz
 
Регистрация: 15.02.2017
Сообщений: 6
По умолчанию

Это лаба, у меня получилось решить первые два, вот код (вроде правильно), проблема только с третьим:
Код:
using System;
using System.Linq;

namespace индз
{
    class Program
    {
        public static int[] arr;
        public static int[] arr_1;
        private static void func2(ref int value)
        {
            arr = new int[] { -7, 3, 8, -3, 5, -4, 9 };
            arr_1 = new int[7];
            int number = 0;
            string t = number.ToString();
            Console.Write("Ввести номер действия:");
            t = Console.ReadLine();
            if (false)
            {
                return;
            }
            number = Int32.Parse(t);
            if (number == 1)// Отделение и суммирование всех нечётных элементов
            {
                for (int u = 0; u < arr.Length; ++u)
                {
                    if (arr[u] % 2 != 0)
                    {

                        arr_1[u] = arr[u];
                        Console.Write(arr_1[u] + " , ");

                    }
                }
                Console.Write("\n" + arr_1.Sum());

            }
            if (number == 2) ;
            {
                Func<int, bool> cond = x => x >= 0;
                arr = arr.SkipWhile(cond).Reverse().SkipWhile(cond).Reverse().ToArray();
                //  arr.SkipWhile(x => x >= 0).Skip(1).Reverse().SkipWhile(x => x >= 0).Skip(1).Reverse().ToArray();

                for (int u = 0; u < arr.Length; ++u)
                {
                    arr_1[u] = arr[u];
                    Console.Write(arr_1[u] + " , ");
                }
                Console.Write("\n" + "Сумма:" + arr_1.Sum());
                Console.ReadLine();
            }
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            int s2 = 0;
            func2(ref s2);
        }
    }
}

Последний раз редактировалось Вадим Мошев; 15.02.2017 в 06:23.
levkoz вне форума Ответить с цитированием
Старый 15.02.2017, 01:27   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Обратила внимание, что большее количества вопросов ты просто проигнорировала?
Это такой психологический приём?
___________________________________ _______________

Ладно забацаю... Но понадобится время, - не на третье задание (оно не сложное), а на разработку интерфейса взаимодействия человек-машина. Потому что ты написала что-то не то...
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 05:13   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде сделал:

Код:
using System;
using System.Linq;

namespace INDZ
{
    class Program
    {
        static double[] A = new double[7];

        static void Main(string[] args)
        {            
            A[0] = -7.9;
            A[1] = 3.4;
            A[2] = 0.0;
            A[3] = -3.1;
            A[4] = 0.6;
            A[5] = -0.9;
            A[6] = 9.1;
     
            int menu = 6;
            while (true)
            {
                if ((menu == 1) || (menu == 2) || (menu == 3) || (menu == 4) || (menu == 5) || (menu == 6) || (menu == 7))
                {
                    if (menu == 1)
                    {
                        int i;
                        Console.WriteLine("---------------------------------------");
                        Console.WriteLine("Текущий массив:");
                        for (i = 0; i < A.Length; i++)
                        {
                            if (A[i] >= 0.0) { Console.Write(" "); }
                            Console.WriteLine("{0:0.0}", A[i]);
                        }
                        Console.WriteLine("---------------------------------------");
                    }
                    
                    if (menu == 2)
                    {
                        int i = 0;
                        Console.WriteLine("---------------------------------------");
                        Console.Write("Введите изменяющий элемент: ");
                        i = Convert.ToInt32(Console.ReadLine());
                        if ((i > 1) && (i < A.Length + 1))
                        {
                            Console.Write("Введите значение A[" + i + "]= ");
                            A[i - 1] = Convert.ToDouble(Console.ReadLine());
                            Console.WriteLine(" OK!");
                        }
                        else
                        {
                            Console.WriteLine(" Error! Ошибка ввода");
                        }
                        Console.WriteLine("---------------------------------------");
                    }
                
                    if (menu == 3)
                    {
                        Console.WriteLine("---------------------------------------");
                        Console.WriteLine("Сумма эл. с нечётными номерами: " + func1()); // Вызов функции №1
                        Console.WriteLine("---------------------------------------");
                    }
                    if (menu == 4)
                    {
                        Console.WriteLine("---------------------------------------");
                        Console.WriteLine("Сумма между 1-м и последним отр-м эл-м: " + func2()); // Вызов функции №2
                        Console.WriteLine("---------------------------------------");
                    }

                    if (menu == 5)
                    {
                        int i;                        
                        Console.WriteLine("---------------------------------------");
                        Console.WriteLine("Изменённый массив:");
                        func3();                                                         // Вызов функции №3
                        for (i = 0; i < A.Length; i++)
                        {
                            if (A[i] >= 0.0) { Console.Write(" "); }
                            Console.WriteLine("{0:0.0}", A[i]);
                        }                       
                        Console.WriteLine("---------------------------------------");
                    }
                    if (menu == 6)
                    {
                        Console.Clear();
                        Console.WriteLine("   МЕНЮ:");
                        Console.WriteLine(" 1 - Вывести текущий массив");
                        Console.WriteLine(" 2 - Изменение массива");
                        Console.WriteLine(" 3 - Вызов функции №1");
                        Console.WriteLine(" 4 - Вызов функции №2");
                        Console.WriteLine(" 5 - Вызов функции №3");
                        Console.WriteLine(" 6 - Обновить консоль");
                        Console.WriteLine(" 7 - Выход");
                        Console.WriteLine("");
                    }
                    if (menu == 7)
                    {
                        break;
                    }                    
                }
                else
                {
                    Console.WriteLine("Ошибка ввода");
                    Console.WriteLine("");
                }
                Console.WriteLine("");
                menu = Convert.ToInt32(Console.ReadLine());
            }
        }
                
        public static double func1()
        {
            double summ = 0;
            for (int i = 0; i < A.Length; i++)
            {
                if ((i + 1) % 2 != 0) 
                {
                    summ = summ + A[i];
                }
            }
            return summ;
        }

        public static double func2()
        {
            double[] arr = new double[A.Length];
            Func<double, bool> cond = x => x >= 0;
            arr = A.SkipWhile(cond).Reverse().SkipWhile(cond).Reverse().ToArray();
            var result = arr.Skip(1).Take(arr.Length - 2);
            return result.Sum();
        }
        
        public static void func3()
        {
            int k = 0;
            for (int i = 0; i < A.Length; i++)
            {
                if (Math.Abs(A[i]) > 1.0)
                {
                    A[k] = A[i];
                    k++;
                }
            }
            for (int i = k; i < A.Length; i++)
            {
                A[i] = 0.0;
            }                
        }
    }
}
Протестируй хорошенько... Когда будешь изменять элементы массива - вводи через запятую (почему то через точку у меня ругается):

11.jpg

p.s.: я только не понял - ты первое задание сделала по одному виду, а второе по другому... Я никогда с таким не сталкивался, ну ладно, сейчас попробую написать альтернативный вид 3-го задания.

Последний раз редактировалось ura_111; 15.02.2017 в 07:28.
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 07:13   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Если вышеприведенный вариант функции №3 тебя не устраивает, тогда можно так:
Код:
  public static void func3()
        {
            double[] arr = new double[A.Length];
            Func<double, bool> cond = x => (Math.Abs(x) > 1);
            A.Where(cond).ToArray().CopyTo(arr, 0);
            arr.ToArray().CopyTo(A, 0);                    
        }
p.s.: но тогда спрашиваться, а почему ты в таком виде не сделала и 1-ю функцию?

Последний раз редактировалось ura_111; 15.02.2017 в 07:27.
ura_111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции в языке С. Передача параметров в функции. Создание многофайловых проектов fifaman Общие вопросы C/C++ 6 28.12.2014 15:30
Табулирование заданной функции и определение максимального и минимального значения функции в таблице Марина1986 C/C++ Сетевое программирование 0 07.05.2013 11:31
Использование подпрограммы-функции: Вычислить значение функции (Турбо паскаль) RealUnited Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2012 20:34
Построение графика функции, мигание(затухание) шарика в минимумах функции kas1m_rus Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2012 20:28
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10