Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C# only

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

AquaTour



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нормальные, понятно написанные.

Всего записей: 22 | Зарегистр. 05-03-2006 | Отправлено: 23:24 12-06-2015
zzz528

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я тут тоже спрошу.
 
Много case, штук 500 примерно,  это нормально? И там еще цикл может до 1000 быть
Потому что я где-то слышал  что много case  это плохо - программа буде тормозить. В обычном c та и везде, если выходило case больше 10, я делал без них с помощью перехода на память.
В сs прямой доступ в память запрещен, нагромаждено всего прочего... что придумать?

Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 16:06 17-06-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
В обычном c та и везде, если выходило case больше 10, я делал без них с помощью перехода на память.  

zzz528, вот это можно в коде увидеть? т.к. по описанию я такое представляю... )

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 16:29 17-06-2015 | Исправлено: NeoAnomaly, 16:36 17-06-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[q]...много case  это плохо - программа буде тормозить...[/q]

Это про if, else if, где, чем ниже if, тем дольше до него добираться.
В простом switch на каждое ветвление уходит одинаковое количество (примерно 2-5) инструкций процессора независимо от case 0 это или case 500. В сложных случаях (case 0:, case 64:, case 3421111:, итд) компилятор собирает код из switch и if найболее оптимальным образом.
Switch по существу и есть "переход на память", типо:

    static const char* g_ptr[] = {L1,L2,L3};
    goto g_ptr[i];
L1:
    puts("zero");
    goto next;
L2:
    puts("one");
    goto next;
L3:
    puts("two");

next:

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:37 17-06-2015
zzz528

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NeoAnomaly
Вроде можно в любом языке где разрешено делать переход по значению в памяти.
 
В зависимости от значения xxx от 0 до 500 нужно сделать разные дейсвия
На асме пример.
 

Код:
 
.data
switch dw case1,case2,case3,case4,case5,....case500
.code
mov      ax,xxx
shl         ax,1 (умножение на 2)
add         ax,offset switch
push    offset endswitch
jmp         word ptr [ax] вот в этом  суть
case1:
...
ret
case2:
...
ret
case3:
...
ret
case4:
...
ret
case5:
...
ret
...
...
...
case500:
...
ret
endswitch:
END
 

 
В сs есть дямбда-выражения какие-то, может с помощю них можно такие вещи проделывать тоже,  пока это темный лес для меня.

Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 17:50 17-06-2015 | Исправлено: zzz528, 17:51 17-06-2015
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вроде можно в любом языке где разрешено делать переход по значению в памяти.  

 
Ну если даже C такого не умеет, то, очевидно, ассемблер единственный такой.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 20:18 17-06-2015
AquaTour



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zzz528, можно попробовать такой способ, но все равно профилировщиком пройтись не помешает.
А вообще для swich с целыми числами, компилятор C# проводит хорошую оптимизацию, наподобие вашего кода на ассемблере

Код:
 var array = new Action[3];
array[0] = () => Console.WriteLine(1);
array[1] = () => Console.WriteLine(2);
array[2] = () => Console.WriteLine(3);
 
var z = 1; // любым способом определить индекс
array[z]();

Всего записей: 22 | Зарегистр. 05-03-2006 | Отправлено: 00:46 18-06-2015 | Исправлено: AquaTour, 00:49 18-06-2015
volchonokebk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго время суток. Я столкнулся с проблемой авторизации и распределением ролей. Итак список пользователей находиться в базе MySQL
Я создал две формы.
 
login_form.cs
new_window.cs
 
Моя задаче при авторизации login_form.cs открывалась new_window.cs
Это я решил вот так:
 
Код:
 

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
 
namespace sessions
{
    public partial class login_form : Form
    {
        public login_form()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string myConnection = " datasource = localhost; port=3306;username=databaseusername; password=databasepassword";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand SelectCommand = new MySqlCommand("select * from databasename.userstable where login_user='" + this.uname.Text + "' and password='" + this.passw.Text + "';", myConn);
                MySqlDataReader myReader;
                myConn.Open();
                myReader = SelectCommand.ExecuteReader();
               
               
                int count = 0;
                while (myReader.Read())
                {
                    count = count + 1;
                   
 
                }
                if (count == 1)
                {
                     
                    new_window nw = new new_window();
                   
                   nw.Show();  
                }
                   
                else
                    MessageBox.Show("IN CORRECT");
            }
            catch(Exception ex)  
            {
                MessageBox.Show("Sorry! ");
                //MessageBox.Show(ex.Message);
            }
        }
    }
}
 

Но теперь нужно чтобы в форме авторизации( login_form.cs) из таблицы вытащить уровень пользователя и передать в рабочую форму( new_window.cs) для последующей обработки. Вытащить из базы уровни пользователей я смог вот так
Код:
 

Код:
string leevel = myReader.GetString("level");
string names = myReader.GetString("nsf");
 

Мне это нужно потому что во второй форме я хочу извлекать из базы ( тоже MySQL) данные продуктов. Но только те которые соответствуют уровню пользователя. Например вот так:
Код:
 

Код:
string Query = "select * from  databasename.tablename where level = Вытащенная во время авторизации level пользователя и переданная на эту форму ";


Всего записей: 19 | Зарегистр. 24-01-2015 | Отправлено: 02:52 12-01-2016 | Исправлено: volchonokebk, 02:54 12-01-2016
volchonokebk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И никто не поможет?

Всего записей: 19 | Зарегистр. 24-01-2015 | Отправлено: 21:48 13-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volchonokebk, собственно в чём вопрос то? Можешь завести в рабочей форме поля, которые будут хранить твои уровни и устанавливать их значения при создании этой формы.
 
 

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 09:03 14-01-2016
volchonokebk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно примерами?

Всего записей: 19 | Зарегистр. 24-01-2015 | Отправлено: 13:12 14-01-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volchonokebk
Тоже не понимаю, в чём возникла проблема.
У вас уровень доступа пользователей базе есть ?
Не получается извлечь ? Или что ?
 
Может и помогли бы, если бы сообразили, в каком месте нужна помощь.

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 07:47 15-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Может и помогли бы, если бы сообразили, в каком месте нужна помощь.  

KDPoid, скорее всего всё как обычно, знаний нет и учиться не хотим, хотим готовое
 
volchonokebk, предлагаю для начала обзавестись теоретическим багажом по теме инкапсуляции. После этого всё должно встать на свои места.
 
В любом случае, уже приведён вариант решения:
Цитата:
Можешь завести в рабочей форме поля, которые будут хранить твои уровни и устанавливать их значения при создании этой формы.  

 
Ну и пример:

Код:
 
class MyDataStoreClass
    {
        private int _value;
 
        public MyDataStoreClass(int Value)
        {
            _value = Value;
        }
 
        public void UseStoredData()
        {
            Console.WriteLine("Stored value: {0}", _value);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            MyDataStoreClass dataStore = new MyDataStoreClass(10);
            dataStore.UseStoredData();
        }
    }
 

 

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 09:27 15-01-2016
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 скорее всего всё как обычно, знаний нет и учиться не хотим, хотим готовое

Совершенно верно!
Могу еще добавить, что структура программы ужасная. Логин-форма должна только предоставлять имя пользователя и пароль.

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 12:38 15-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Могу еще добавить, что структура программы ужасная. Логин-форма должна только предоставлять имя пользователя и пароль.

Alexzzy, для первых домашних поделок/лабораторных, которые нет необходимости поддерживать/расширять, на мой взгляд, пойдёт и так, когда уже будут освоены основы(хотя бы чтобы не возникало вопросов, как передавать данные между классами) можно думать и о структуре.

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 14:38 15-01-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз уж у нас тут пятничный off-topic...
NeoAnomaly, оглянитесь вокруг... "пойдёт и так" - вполне успешная бизнес-модель.
Рынок достаётся не тому софту, который решает проблему наилучшим способом, а тому, кто первый решает хоть как-то...
А потом можно выпустить патчи...
И даже если что-то разумное у вас получается только после 11-го патча к третьей версии, это не помешает стать самым богатым человеком на планете.

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 17:49 15-01-2016
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для такой задачи конечно пойдет и так... Да, основы надо подтягивать, объяснение элементарных вещей не совсем для форума.

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 22:24 15-01-2016 | Исправлено: Alexzzy, 22:25 15-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KDPoid, это бесспорно так, но вы наверное помните, я в теме про БД говорил, что я идеалист и в подвластных мне команде/проектах не допускаю полумер, что в итоге при игре на долгосрочную перспективу даёт плюс. Т.к. со временем технические долги начинают конвертироваться во вполне реальные финансовые... Так что, на мой взгляд, всё зависит от сроков игры.
 
Alexzzy, ну, если других мест нет, то почему бы и не форум, это с высоты опыта элементарные вещи воспринимаются по другому. Я например, долго не мог усвоить указатели, сейчас я даже понять не могу, что было не понятно Просто вспоминая себя, я никогда на форумы не приходил с вопросами/запросами по готовому коду. Писал, что прочитал, что пробовал и вопрос был в том, что делаю не так и в каком направлении лучше дальше двигаться. Вопрос то именно в том, хочет человек учиться или копипастом заниматься.
 

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 15:00 16-01-2016
volchonokebk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я пока читаю предложенные тут варианты и пытаюсь сделать сам. Ну а инфа для размышления тем кто сетуют что тут приходят за готовым кодом.    
Во первых нигде в правилах форума не написано что люди не могут тут искать готовые коды
Во вторых  есть люди которым более понятно когда им показывают чем если бы они посмотрели бы видео урок или же  прочитали бы в книжке
В третьих не у всех есть деньги на качественные курсы  а бесплатные видео уроки или книги написаны так "понятно" что если б авторы описали бы там как правильно умножить 2 на 2 то не все этого поняли бы ....  
 
Добавлено:

Цитата:
NeoAnomaly, оглянитесь вокруг... "пойдёт и так" - вполне успешная бизнес-модель.  

Напрасно вы так я клянусь что я не для того, чтоб заработать это делаю. Это мое хобби. Но я пока читаю про инкапсуляцию...  
 
Добавлено:

Цитата:
Вопрос то именно в том, хочет человек учиться или копипастом заниматься.  

Хочет просто  после 35 учиться намного сложнее чем в молодости

Всего записей: 19 | Зарегистр. 24-01-2015 | Отправлено: 22:37 16-01-2016
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volchonokebk,
Вот иду я по тайге... вижу мужик себе дрова на костёр рубит. Да так неумело... "Хех.", - думаю я, - "Сам когда-то так корячился". Чего бы и не помочь нарубить, подсказать, как удобнее. Делов-то тут...  
Или иду я по тайге, сидит под ёлкой мужик, мёрзнет и голосит: "Всё равно же мимо идёте, ну нарубите мне дров, да костёр сделайте, трудно вам что-ли, гады."  
Правил, запрещающих просить помощь, в тайге нет. Но в первом случае шансов получить помощь гораздо больше...  
По крайней мере, в местной тайге...
 

Цитата:

Цитата:
NeoAnomaly, оглянитесь вокруг... "пойдёт и так" - вполне успешная бизнес-модель.  
Напрасно вы так я клянусь что я не для того, чтоб заработать это делаю.

А эта шпилька была не для вас Мы с NeoAnomaly, в разных темах встречаемся и периодически обмениваемся уколами, потому что он радеет за совершенствование программы до абсолюта, а меня часто одёргивают, что наша цель не "создать идеальное решение", а "решить проблему клиента". И я понимаю, что они правы. Когда я переделываю архитектуру программы, чтобы решение стало элегантнее, и это не улучшает функциональность для клиента, - это я трачу деньги клиента на удовлетворение своих эстетических потребностей
 

Цитата:
 
Хочет просто  после 35 учиться намного сложнее чем в молодости  
 

А не расслабляйтесь. Подучивать что-то новое придётся постоянно 20 лет назад C# ещё просто не было. И это здорово.
Если бы мне на старте кто-нибудь сказал "И теперь, за пределами FORTRAN77, для тебя жизни нет", я бы сразу переплевался и ушёл проводником на железную дорогу...
 
Так что, заканчивая офф-топить,  
раз "пока читаю про инкапсуляцию", это да, настоятельно советую дочитать. Без основ ООП в C# будет сложно понять, что происходит. Уткнётесь, - показывайте код, рассказывайте в чём проблема. Вполне может кто-нибудь и помочь дров нарубить. Делов то...

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 05:24 17-01-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C# only


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru