none
Вывод массива из метода. RRS feed

  • Вопрос

  • Есть задание: 
    В одномерном массиве состоящем из n элементов вычислить:
    1. минимальный по модулю элемент массива (метод MaxArray);
    2. сумму модулей элементов массива, расположенных после первого элемента равного нулю (метод Summ);
    преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине элементы стоявшие в нечетных позициях (метод Reversee);
    проблема в том как вывести преобразованный массив из метода Reversee, нужно присвоить массиву a массив b из метода, как это сделать? на что заменить return b в методе Reversee? Заранее благодарен
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    
    namespace ConsoleApplication11
    {
        class Program
        {
            static double MaxArray(params int[] a)
            {
                int max = a[0];
                for (int i = 0; i < a.Length; ++i)
                {
                    if (Math.Abs(a[i]) < Math.Abs(max))
                        max = a[i];
                }
                return max;
            }
            static double Summ(params int[] a)
            {
                int FirstZeroElement = 0;
                for (int i = 0; i < a.Length; ++i)
                {
                    if (a[i] == 0)
                    {
                        FirstZeroElement = i;
                        break;
                    }
    
                }
                int sum = 0;
                for (int i = FirstZeroElement; i < a.Length; ++i)
                {
                    sum += a[i];
                }
                return sum;
            }
            static void Reversee(params int[] a)
            {
                int[] b = new int[a.Length];
                int j = 0;
                for (int i = 1; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                for (int i = 0; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                return b;
            }
            static void Main(string[] args)
            {
    
                StreamReader f = new StreamReader("C:\\test.txt");
                string s = f.ReadLine();
                string[] buf;
                buf = s.Split(' ');
                int[] a = new int[buf.Length];
                for (int i=0; i< buf.Length; ++i)
                {
                    a[i] = Convert.ToInt32(buf[i]);
                    Console.Write(" "+(a[i] + 13));
                }
                f.Close();
                StreamWriter der = new StreamWriter("C:\\test2.txt");
                der.WriteLine("Максимальный по модулю элемент: "+MaxArray(a));
                der.Close();
                Reversee(a);
    
                foreach (int x in a)
                    Console.WriteLine(x);
                Console.ReadLine();
            }
        }
    }
    
    • Перемещено I.Vorontsov 24 декабря 2009 г. 6:33 (От:Visual C#)
    • Перемещено SachinW 1 октября 2010 г. 22:12 MSDN Forums Consolidation (От:Начинающие разработчики)
    9 декабря 2009 г. 14:40

Ответы

  • Оно и не будет компилироваться. На счёт непонятных вещей согласен.
    FYI array.Reverse

    void обозначает, что этот метод не возвращает какого-либо значения.

    static int[] Reversee(params int[] a)
            {
                int[] b = new int[a.Length];
                int j = 0;
                for (int i = 1; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                for (int i = 0; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                return b;
            }

    В функции main:
    a=Reversee(a);

    • Предложено в качестве ответа I.Vorontsov 10 декабря 2009 г. 10:42
    • Помечено в качестве ответа demon44 12 декабря 2009 г. 20:41
    10 декабря 2009 г. 10:38

Все ответы

  • demon44 пожалуйста отмечайте посты, которые являются решением  или помогли в решении вашей задачи..(это правила форума) вернитесь к старым темам. Пример брошенного вами треда.
    9 декабря 2009 г. 14:49
  •  исправился, но в примере приведенном вами еще не до конца с вопросом разобрался, спасибо за замечание)) что можно придумать по поводу этого массива?
    9 декабря 2009 г. 14:58
  • А оно вообще компилируется? Функция Reversee имеет тип возврата void, но возвращает массив. Это как?
    Вообще, функции делают какие-то непонятные вещи :)
    10 декабря 2009 г. 10:22
  • Оно и не будет компилироваться. На счёт непонятных вещей согласен.
    FYI array.Reverse

    void обозначает, что этот метод не возвращает какого-либо значения.

    static int[] Reversee(params int[] a)
            {
                int[] b = new int[a.Length];
                int j = 0;
                for (int i = 1; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                for (int i = 0; i < a.Length; i = i + 2)
                {
                    b[j] = a[i]; ++j;
                }
                return b;
            }

    В функции main:
    a=Reversee(a);

    • Предложено в качестве ответа I.Vorontsov 10 декабря 2009 г. 10:42
    • Помечено в качестве ответа demon44 12 декабря 2009 г. 20:41
    10 декабря 2009 г. 10:38
  • Реализовал слегка по другому: a.CopyTo(b, 0);
    12 декабря 2009 г. 20:41