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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2015, 15:17   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию Функция с выдачей двух массивов С#

Код:
string pskmod(string X, out string YI, out string YQ)
        {
            char c01, c02, c03; string ctrois = ""; string ctr = "";
            for (int i = 0; i < X.Length; i = i + 3)
            {
                c01 = X[i]; c02 = X[i + 1]; c03 = X[i + 2];
                ctrois = ctr + c01 + c02 + c03;
                //5 = 1; 4 = 0.707; 3 = 0; 2 = -0.707; 1 = -1; 
                if (ctrois == "000")
                { YI += 5; YQ += 3; }
                else if (ctrois == "001")
                { YI += 4; YQ += 4; }
                else if (ctrois == "010")
                { YI += 2; YQ += 4; }
                else if (ctrois == "011")
                { YI += 3; YQ += 5; }
                else if (ctrois == "100")
                { YI += 4; YQ += 2; }
                else if (ctrois == "101")
                { YI += 3; YQ += 1; }
                else if (ctrois == "110")
                { YI += 1; YQ += 3; }
                else if (ctrois == "111")
                { YI += 2; YQ += 2; }
            }   
                return "0";
         }
Я пишу первый раз функцию с возвращением нескольких переменных. Эта функция сейчас выдает ошибки, привожу часть

Error 2 Use of unassigned out parameter 'YI' c:\users\engineer\desktop\step1_bin fft_v2\bin_creator\bin_creator\form m.cs 289 19 Bin_creator

Error 4 The out parameter 'YI' must be assigned to before control leaves the current method c:\users\engineer\desktop\step1_bin fft_v2\bin_creator\bin_creator\form m.cs 305 17 Bin_creator


Error 6 'Bin_creator.FormM.pskmod(string, out string, out string)': not all code paths return a value c:\users\engineer\desktop\step1_bin fft_v2\bin_creator\bin_creator\form m.cs 280 16 Bin_creator


Что делать? Мне нужно просто на вход функции подать X, а на выходе получить XI и XQ.

Последний раз редактировалось Krasi; 20.10.2015 в 15:20.
Krasi вне форума Ответить с цитированием
Старый 20.10.2015, 15:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

У вас есть параметры помеченные out, т.е. выходные, но в одном из путей вы им не задаете значений (последний иф без елса). В вашем случае проще было бы сделать два массива и индексировать их ctrois'ом
p51x вне форума Ответить с цитированием
Старый 20.10.2015, 15:32   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Понял, с этой ошибкой я разобрался. Но теперь функция ошибок не выдает, а вот обратиться к ней я не могу.
Цитата:
string psk8mod(string X, out string YQ)
{
string YI = ""; YQ = "";
char c01, c02, c03; string ctrois = ""; string ctr = "";
for (int i = 0; i < X.Length; i = i + 3)
{
c01 = X[i]; c02 = X[i + 1]; c03 = X[i + 2];
ctrois = ctr + c01 + c02 + c03;
//5 = 1; 4 = 0.707; 3 = 0; 2 = -0.707; 1 = -1;
if (ctrois == "000")
{ YI += 5; YQ += 3; }
else if (ctrois == "001")
{ YI += 4; YQ += 4; }
else if (ctrois == "010")
{ YI += 2; YQ += 4; }
else if (ctrois == "011")
{ YI += 3; YQ += 5; }
else if (ctrois == "100")
{ YI += 4; YQ += 2; }
else if (ctrois == "101")
{ YI += 3; YQ += 1; }
else if (ctrois == "110")
{ YI += 1; YQ += 3; }
else if (ctrois == "111")
{ YI += 2; YQ += 2; }

}
////////Конвертируем числа от 1 до 5 в числа на комплексной плоскости/////////
double Icur = 1; double Qcur = 1;
for (int i = 0; i < YI.Length; i++)
{
Icur = (double)YI[i]; Qcur = (double)YQ[i];
if (Icur == 49) Icur = -1;
if (Icur == 50) Icur = -0.707;
if (Icur == 51) Icur = 0;
if (Icur == 52) Icur = 0.707;
if (Icur == 53) Icur = 1;

if (Qcur == 49) Qcur = -1;
if (Qcur == 50) Qcur = -0.707;
if (Qcur == 51) Qcur = 0;
if (Qcur == 52) Qcur = 0.707;
if (Qcur == 53) Qcur = 1;
//////////////////Поточечно строим созвездие 8-PSK сигнала///////////////////
list1.Add(Icur, Qcur);
}
return YI;
}
Код правильной функции

Вот так ее не могу вызвать:
Код:
Ipart[itmr - 1] = psk8mod(difcod[itmr - 1], Qpart[itmr - 1]);
В чем может быть дело?

Цитата:
Error 1 The best overloaded method match for 'Bin_creator.FormM.psk8mod(string, out string)' has some invalid arguments c:\users\engineer\desktop\step1_bin fft_v2\bin_creator\bin_creator\form m.cs 119 35 Bin_creator

Error 2 Argument 2 must be passed with the 'out' keyword c:\users\engineer\desktop\step1_bin fft_v2\bin_creator\bin_creator\form m.cs 119 61 Bin_creator

Последний раз редактировалось Krasi; 20.10.2015 в 15:35.
Krasi вне форума Ответить с цитированием
Старый 20.10.2015, 15:36   #4
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

А, вот оно чо. Ipart[itmr - 1] = psk8mod(difcod[itmr - 1], out Qpart[itmr - 1]);
Вроде так все работает.
Krasi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арифметическое деление двух массивов в два байта, как двух целых чисел Ixmil Паскаль, Turbo Pascal, PascalABC.NET 8 28.09.2015 08:36
Сравнение двух массивов bigfootik Microsoft Office Excel 6 20.12.2013 17:55
Уравнение двух массивов VmanMaslov Общие вопросы C/C++ 5 14.10.2011 07:56
Сравнение двух массивов Рик Общие вопросы Delphi 3 07.04.2011 15:53
Слияние двух массивов Anubys Помощь студентам 0 26.03.2011 16:12