Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Ламерские" вопросы, задаем здесь элементарные вопросы 
:(
    Опции темы
OrionRussia
Дата 24.8.2010, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.8.2010

Репутация: нет
Всего: нет



Цитата(gambit @ 24.8.2010,  12:38)
Код

TCar c1 = new TCar();
                TCar c2 = new TCar(1993, "BMV");
                Console.WriteLine("Год выпуска : " + c1.GetYear + "\n" + "Марка автомобиля: " + c2.GetMark);
                

и это почти не вникая в код((((

Ну, оно и понятно или ты - человек который собаку на этом деле съел, а я только учусь. Признаю, что чайник. 

А как могло повлиять это? Только ведь поменял местами.

Кстати, условие не выполняется.

Добавлено через 9 минут и 44 секунды
Условие сделал.

Добавлено через 12 минут и 2 секунды
Вот так эта порнография должна выглядеть.
Код

namespace ConsoleApplication2
{
    class TCar
    {
        string mark;
        int year;
        public TCar() { mark = ""; }
        public TCar(int Year, string Mark)
        {
            this.year = Year;
            this.mark = Mark;
        }

        public void setCar(string Mark, int Year)
        {
            this.mark = Mark;
            this.year = Year;
        }


        public string GetMark
        {
            set { if (mark == "")mark = value; }
            get { return (mark); }
        }
        public int GetYear
        {
            set
            {
                try
                {
                    if (value < 1970 || value > 2010)
                        throw new ArgumentOutOfRangeException("value", value.ToString(), "Ошибка!\n Машина не должна быть старше 1970 года.");
                    year = value;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            get { return (year); }
        }

        class Program
        {
            static void Main(string[] args)
            {
                TCar car = new TCar();
                for (; ; )
                {
                    try
                    {

                        Console.WriteLine("Укажите марку автомобиля.");
                        string buf = Console.ReadLine();
                        string Mark = Convert.ToString(buf);
                        Console.WriteLine("Укажите год выпуска автомобиля.");
                        int god = int.Parse(Console.ReadLine());
                        // int Year = Convert.ToInt32(god);
                        car.setCar(buf, god);
                        Console.WriteLine("");
                        Console.WriteLine("{0}" + " " + "{1}", car.GetMark, car.GetYear);

                        break;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("Ошибка при вводе!");

                    }
                }
                
                TCar c1 = new TCar();
                TCar c2 = new TCar(1993, "BMV");
                c1.GetYear = car.year;
                Console.WriteLine("Год выпуска : " + c1.GetYear + "\n" + "Марка автомобиля: " + c2.GetMark);


                Console.ReadLine();
            }
        }
    }
}


Добавлено через 12 минут и 26 секунд
Санкью за помощь!

Это сообщение отредактировал(а) OrionRussia - 24.8.2010, 13:32
PM MAIL   Вверх
gambit
Дата 24.8.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(OrionRussia @  24.8.2010,  13:31 Найти цитируемый пост)
Ну, оно и понятно или ты - человек который собаку на этом деле съел, а я только учусь

Собаку еще только жарю)) И еще момент, я не в коем случае, не тыкаю носом и не пытаюсь опустить, я именно подсказываю)) А то подумаешь еще, что пришел, и строю из себя крутого)

Цитата(OrionRussia @  24.8.2010,  13:31 Найти цитируемый пост)
Условие сделал.

нет
Код

public TCar(int Year, string Mark)
        {
            this.year = Year;
            this.mark = Mark;
        }
        public void setCar(string Mark, int Year)
        {
            this.mark = Mark;
            this.year = Year;
        }

ты здесь присваиваешь значения полям, а должен свойствам.

Код

TCar c1 = new TCar();
                TCar c2 = new TCar(1993, "BMV");
                c1.GetYear = car.year;
                Console.WriteLine("Год выпуска : " + c1.GetYear + "\n" + "Марка автомобиля: " + c2.GetMark);

но что здесь происходит, я все равно не понял(( Для чего нужны c1 и c2, почему год берется от одной, а название от другой?? Для чего лишнее создание объекта, если ты все равно присваиваешь ему значение уже созданного?? 
PM MAIL ICQ Skype   Вверх
wester
Дата 24.8.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



mrbrooks
FtpWebRequest.Method не поддерживает произвольные комманды
PM MAIL   Вверх
OrionRussia
Дата 24.8.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.8.2010

Репутация: нет
Всего: нет



Так надо, тут два задания в одном. Даже три. 
А почему ты написал, что условие не выполняется? Вроде всё нормально, если ввожу число ниже предельного, выдаёт ошибку, как положено.

Это сообщение отредактировал(а) OrionRussia - 24.8.2010, 14:58
PM MAIL   Вверх
gambit
Дата 24.8.2010, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(OrionRussia @  24.8.2010,  14:49 Найти цитируемый пост)
А почему ты написал, что условие не выполняется? Вроде всё нормально, если ввожу число ниже предельного, выдаёт ошибку, как положено.

замени
Код

TCar c2 = new TCar(1993, "BMV");

на
Код

TCar c2 = new TCar(1, "BMV");

И BMW первого года выпуска, будет создана без всяких возмущений.

Добавлено через 1 минуту и 7 секунд
кстати
Код

Console.WriteLine("");

не обязательно
достаточно (и лучше)
Код

Console.WriteLine();

PM MAIL ICQ Skype   Вверх
wester
Дата 24.8.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



mrbrooks
FtpWebRequest.Method не поддерживает произвольные комманды
PM MAIL   Вверх
mrbrooks
Дата 24.8.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



wester, если тебя это класс не устраивает пиши на сокетах.
PM MAIL   Вверх
YuriZ
Дата 30.8.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.9.2009

Репутация: нет
Всего: нет



Добрый день!

В одном классе два метода (1. private void CalcCurrentPrice, 2. public virtual void Execute), как из первого передать данные curPrice во второй? Сокращённо, код:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;
using TSLab.Script.Realtime;
 
namespace TSLab.Samples
{
public class Final : IExternalScript
{
        public double …
        
        private void CalcCurrentPrice(ISecurityRt rtSec, out double curQty, out double curPrice)
        {
                curQty = 0;
                curPrice = 0;
                if (rtSec != null)
                {
                        var orders = rtSec.Orders.OrderBy(ord => ord.Date);
                        foreach (var order in orders)
                        {
                                if (order.IsExecuted)
                                {
                                        int bs = (order.IsBuy ? 1 : -1);
                                        double qty = order.Quantity * bs;
                                        double price = order.Price;
                                        double newQty = curQty + qty;
                                        bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
                                        if (isGrowPos)
                                        {
                                                curPrice = newQty == 0 ? 0 : (curQty*curPrice + qty*price)/newQty;
                                        }
                                        curQty = newQty;
                                }
                        }
                }
                curPrice = curQty == 0 ? 0 : curPrice;
        }
        
        public virtual void Execute(IContext ctx, ISecurity sec)
        {
                var …
                                                                        
                IList<double> …                 
                {
                        //Расчёт параметров
                        …
                }
                // Торговля.
                if (!sec.Positions.IsRealtime) return;
                {
                        if (sec.LowPrices[i] <= curQty - OtskokS)
                        secRt.NewOrder(TSLab.DataSource.OrderType.Growth…);
                }
        }
}
}

При проведении компиляции в предпоследней строке (if (sec.LowPrices[i] <= curQty - OtskokS)) ошибка:
Имя 'curPrice' отсутствует в текущем контексте.
PM MAIL   Вверх
Fortnox
Дата 30.8.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Если первый выполняется во втором, то возвращать результата вычисления первого и убрать передачу curPrice по ссылке:
Код

private double CalcCurrentPrice(ISecurityRt rtSec, out double curQty, double curPrice)
        {
            curQty = 0;
            curPrice = 0;
            if (rtSec != null)
            {
                var orders = rtSec.Orders.OrderBy(ord => ord.Date);
                foreach (var order in orders)
                {
                    if (order.IsExecuted)
                    {
                        int bs = (order.IsBuy ? 1 : -1);
                        double qty = order.Quantity * bs;
                        double price = order.Price;
                        double newQty = curQty + qty;
                        bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
                        if (isGrowPos)
                        {
                            curPrice = newQty == 0 ? 0 : (curQty * curPrice + qty * price) / newQty;
                        }
                        curQty = newQty;
                    }
                }
            }
            curPrice = curQty == 0 ? 0 : curPrice;
            return curPrice;
        }

или, например, если нужны будут значения 2: curQty и curPrice, не убирать ее, а воспользоваться ею, во втором методе во время вызова первого метода:
Код

double curQty;
double curPrice;
CalcCurrentPrice(rtSec, out curQty, out curPrice); 
// после выполнения, в переменных будут нужные значения


Это сообщение отредактировал(а) Fortnox - 30.8.2010, 15:19
PM MAIL   Вверх
YuriZ
Дата 30.8.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.9.2009

Репутация: нет
Всего: нет



Спасибо за ответ.
Да второй метод предпочтительней чтобы можно было использовать curQty и curPrice, но можно обойтись и только последним.

Однако, оба предложенных варианты выдали ошибки:
Первый: 1. 'TSLab.Samples.Final.CalcCurrentPrice(TSLab.Script.Realtime.ISecurityRt, out double, out double)' возвращает значение void, поэтому после ключевого слова return не должно задаваться выражение объекта. 2. Имя 'curPrice' отсутствует в текущем контексте.

Второй: Имя 'rtSec' отсутствует в текущем контексте. На строку: CalcCurrentPrice(rtSec, out curQty, out curPrice);
PM MAIL   Вверх
Fortnox
Дата 30.8.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



YuriZ, первый случай: 
1) изменить тип возвращаемого значения метода с void на double:
Код

private double CalcCurrentPrice(ISecurityRt rtSec, out double curQty, double curPrice)

2) проверить все слова "curPrice", может быть банальная опечатка, например, c - русская.
Второй:
Объявить класс, который наследуется от интерфейса ISecurityRt, реализовать методы интерфейса, и использовать:
Код

public class SecurityRt: ISecurityRt
{
    
}

public virtual void Execute(IContext ctx, ISecurity sec)
        {
                var …
                       
                SecurityRt sec = new SecurityRt(); // создаем объект
                double curQty; // объявляем переменные
                double curPrice;
                CalcCurrentPrice(sec, out curQty, out curPrice); // и вызываем метод                     
                IList<double> …                 
                {
                        //Расчёт параметров
                        …
                }
                // Торговля.
                if (!sec.Positions.IsRealtime) return;
                {
                        if (sec.LowPrices[i] <= curQty - OtskokS)
                        secRt.NewOrder(TSLab.DataSource.OrderType.Growth…);
                }
        }

Все было бы легче, если бы код был наглядее и понятнее, что за интерфейсы, переменные и т.д. А так, очевидно, код "вырван" откуда-то.
PM MAIL   Вверх
YuriZ
Дата 30.8.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.9.2009

Репутация: нет
Всего: нет



Второй вариант получился, сначала не заметил внесённых исправлений - спасибо.

Это сообщение отредактировал(а) YuriZ - 30.8.2010, 17:20
PM MAIL   Вверх
YuriZ
Дата 30.8.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.9.2009

Репутация: нет
Всего: нет



На послед не подскажете, чем:

ISecurityRt secRt = sec as ISecurityRt;

отличается от:

SecurityRt sec = new SecurityRt();

Заранее - спасибо.
PM MAIL   Вверх
Fortnox
Дата 30.8.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



YuriZ
преобразование типов: класса к интерфейсу (эдакое создание интерфейса через преобразование), если sec это класс:
Код

ISecurityRt secRt = sec as ISecurityRt;

Создание объекта (класса):
Код

SecurityRt sec = new SecurityRt();

PM MAIL   Вверх
OrionRussia
Дата 3.9.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.8.2010

Репутация: нет
Всего: нет



Господа-товарищи! Создал программку, приложения Windows http://ifolder.ru/19147343 (менее 50кб, для Visual 2008), проблема в том, что не могу инвертировать массив, всё самое интересное сделал, с грехом пополам. Всю "порнографию" которая касается инвертирования я убрал, чтобы не позориться, там вообще тупик. Короче, при пометке соответствующего checkbox'a должен выводиться инвертированный массив, не новый, а тот, что был ранее сгенерирован. Помогите, наставьте на путь истинный.

Это сообщение отредактировал(а) OrionRussia - 3.9.2010, 17:23
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1172 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.