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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# по Карли Ватсону 
:(
    Опции темы
massimo2
Дата 8.8.2011, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуй, народ!
Совсем недавно я захотел попробовать заняться программированием
Перебрал кучу инфы, что к чему, с чего начинать, что изучать, как и т.д.
Ну выбрал в итоге C#. Вроде для новичков советуют. Читаю и изучаю книгу Карли Ватсона - C#
Может кто-то её изучал, или читает сейчас, прошу оставить отзывы. А также хотелось тут обсуждать упражнения которые там даются, т.к. ответов там нет. А самому сложновато разбираться. 
Вот не могу выполнить упражнение о множестве Мандельброта...(

Вот сам код 
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch04Ex06
{
    class Program
    {
        static void Main(string[] args)
        {
            double realCoord, imagCoord;
            double realTemp, imagTemp, realTemp2, arg;
            int iterations;
            for (imagCoord=1.2;imagCoord>=-1.2;imagCoord-=0.05)
            {
                for (realCoord=-0.6;realCoord<=1.77;realCoord+=0.03)
                {
                    iterations=0;
                    realTemp=realCoord;
                    imagTemp=imagCoord;
                    arg=(realCoord*realCoord)+(imagCoord*imagCoord);
                    while ((arg<4)&&(iterations<40))
                    {
                        realTemp2=(realTemp*realTemp)-(imagTemp*imagTemp)-realCoord;
                        imagTemp=(2*realTemp*imagTemp)-imagCoord;
                        realTemp=realTemp2;
                        arg=(realTemp*realTemp)+(imagTemp*imagTemp);
                        iterations+=1;
                    }
                    switch(iterations%4)
                    {
                        case 0:
                            Console.Write(".");
                            break;
                        case 1:
                            Console.Write("0");
                            break;
                        case 2:
                            Console.Write("0");
                            break;
                        case 3:
                            Console.Write("8");
                            break;
                    }
                }
                Console.Write("\n");
            }

        }
    }
}

Надо изменить его таким образом, чтобы оно запршивало у пользователя границы рисунка и выводило выбранную часть рисунка. 
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(massimo2 @  7.8.2011,  23:18 Найти цитируемый пост)
Может кто-то её изучал, или читает сейчас, прошу оставить отзывы.

ну
Цитата(massimo2 @  7.8.2011,  23:18 Найти цитируемый пост)
т.к. ответов там нет

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

код в посте это пример из книги?

Цитата(massimo2 @  7.8.2011,  23:18 Найти цитируемый пост)

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

а в чем вопрос? вот у меня вопрос есть, куда пользователь должен это все вводить(м.б. в  консоль?) и куда ему должна выводиться выбранная часть рисунка?
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
куда пользователь должен это все вводить(м.б. в  консоль?)


Код пишется либо в Notepad и сохраняется в расширении cs, а затем компилируется через командную строку, и потом можно запустить созданную программу и проверить.
Либо (если по книге) всё делаешь в Visual Studio

Цитата
и куда ему должна выводиться выбранная часть рисунка?

Ну а выводиться уже должна в консоли, т.к. работаем с консольными приложениями пока.

А насчёт книги, так вроде всё написано понятным языком, пока всё норм. Хотя я вообще ноль в программировании.
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(massimo2 @  8.8.2011,  11:37 Найти цитируемый пост)
Код пишется либо в Notepad и сохраняется в расширении cs, а затем компилируется через командную строку, и потом можно запустить созданную программу и проверить.

при чем тут то куда пишется код? я спросил куда пользователь должен ввести значения? или ты хочешь их прямо в код вводить? и что значит "выводиться"? картинку(изображение) в консоль? или какие то координаты?

Цитата(massimo2 @  8.8.2011,  11:37 Найти цитируемый пост)
Хотя я вообще ноль в программировании. 


по моему личному мнению в таких случаях надо взять Си, там как то быстрее понимаются всякие нюансы мелкие, виднее что ли становиться...
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



надо исправить код, что же ещё?!
а картинка состоит из символов, вот в чём дело.
вы бы запустили программу и проверили, сразу стало бы понятно
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(massimo2 @  8.8.2011,  11:54 Найти цитируемый пост)
надо исправить код, что же ещё?!

 smile  smile  smile 

т.е. нужно будет каждый раз, когда пользователю вздумалось получить другой вариант, исправлять код?  smile 

с "картинкой" все понятно. для того что бы ввести значения есть Console.Read/Console.ReadLine

а дальше уже логика твоей программы должна решать какую часть выводить, так как картинка у тебя нигде не храниться и делается на лету, то тебе нужно будет подставить в циклы свои значения(полученные от пользователя) и пересчитать еще раз.
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да всё верно вы написали.
просто я вообще не могу въехать в этого мандельброта...
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 14:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



massimo2, я надеюсь, что вполне понятен тот факт что если я сделаю вместо тебя то ты скорее всего не научишься, что бы понять и разобраться надо сделать самостоятельно, задай конкретный вопрос, что именно не понятно, я попытаюсь объяснить.
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



какие цифры должны быть в коде я вычислил, но как связать это с запрсом пользователя, не могу врубиться. Например будет выводиться: Какую часть рисунка показать(1 - верхняя, 2- нижняя, др. - весь рисунок). Допустим пользователь введет 1, и как сделать чтоб при вводе единицы менялась определённая переменная цикла for ?
 В принципе можно наделать ветвлений с помощью switch (каждый раз засовывая туда цикл for), но код будет очень уж объёмным! 


И всё же задание можно считать выполненным. Вот так выглядит код:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch04Ex06
{
    class Program
    {
        static void Main(string[] args)
        {
            double realCoord, imagCoord;
            double realTemp, imagTemp, realTemp2, arg;
            int iterations;
            int f1;
            for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05)
            {
                for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
                {
                    iterations = 0;
                    realTemp = realCoord;
                    imagTemp = imagCoord;
                    arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                    while ((arg < 4) && (iterations < 40))
                    {
                        realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                        imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                        realTemp = realTemp2;
                        arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                        iterations += 1;
                    }
                    switch (iterations % 4)
                    {
                        case 0:
                            Console.Write(".");
                            break;
                        case 1:
                            Console.Write("0");
                            break;
                        case 2:
                            Console.Write("0");
                            break;
                        case 3:
                            Console.Write("8");
                            break;
                    }
                } Console.Write("\n");
            }
            goth:    
            Console.WriteLine("Какую часть рисунка показать: 1 - нижняя половина, 2 - верхняя половина, 3 - верхняя правая четверть");
                f1 = Convert.ToInt32(Console.ReadLine());
                switch (f1)
                {
                    case 1:
                        for (imagCoord = 0.0; imagCoord >= -1.2; imagCoord -= 0.05)
                        {
                            for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
                            {
                                iterations = 0;
                                realTemp = realCoord;
                                imagTemp = imagCoord;
                                arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                                while ((arg < 4) && (iterations < 40))
                                {
                                    realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                                    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                                    realTemp = realTemp2;
                                    arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                                    iterations += 1;
                                }
                                switch (iterations % 4)
                                {
                                    case 0:
                                        Console.Write(".");
                                        break;
                                    case 1:
                                        Console.Write("0");
                                        break;
                                    case 2:
                                        Console.Write("0");
                                        break;
                                    case 3:
                                        Console.Write("8");
                                        break;
                                }
                            } Console.Write("\n");
                        }
                        break;

                    case 2:
                        for (imagCoord = 1.2; imagCoord >= 0.0; imagCoord -= 0.05)
                        {
                            for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)
                            {
                                iterations = 0;
                                realTemp = realCoord;
                                imagTemp = imagCoord;
                                arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                                while ((arg < 4) && (iterations < 40))
                                {
                                    realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                                    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                                    realTemp = realTemp2;
                                    arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                                    iterations += 1;
                                }
                                switch (iterations % 4)
                                {
                                    case 0:
                                        Console.Write(".");
                                        break;
                                    case 1:
                                        Console.Write("0");
                                        break;
                                    case 2:
                                        Console.Write("0");
                                        break;
                                    case 3:
                                        Console.Write("8");
                                        break;
                                }
                            }
                            Console.Write("\n");
                        } break;
                    case 3:
                        for (imagCoord = 1.2; imagCoord >= 0.0; imagCoord -= 0.021)
                        {
                            for (realCoord = 0.6; realCoord <= 1.77; realCoord += 0.0150)
                            {
                                iterations = 0;
                                realTemp = realCoord;
                                imagTemp = imagCoord;
                                arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                                while ((arg < 4) && (iterations < 40))
                                {
                                    realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                                    imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                                    realTemp = realTemp2;
                                    arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                                    iterations += 1;
                                }
                                switch (iterations % 4)
                                {
                                    case 0:
                                        Console.Write(".");
                                        break;
                                    case 1:
                                        Console.Write("0");
                                        break;
                                    case 2:
                                        Console.Write("0");
                                        break;
                                    case 3:
                                        Console.Write("8");
                                        break;
                                }
                            }
                            Console.Write("\n");
                        }
                        break;
                }
            goto goth;
            }
        }
    }

Вначале выведется рисунок, а затем вы сможете выбрать какую часть рисунка вам показать.


Это сообщение отредактировал(а) massimo2 - 8.8.2011, 16:48
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



у тебя написано:
Код

for (imagCoord=1.2;imagCoord>=-1.2;imagCoord-=0.05)


но ведь ты можешь написать
Код

        double i = 1.2;
for (imagCoord=i;imagCoord>=-1.2;imagCoord-=0.05)

а откуда ты возьмешь это i циклу все равно, прочитаешь из консоли или из файла или еще откуда, не имеет значения.
по поводу вывода, я не совсем въезжаю что должно получиться, но можно сделать один свитч, который будет решать че делать с тем что ввел пользователь, потом все логику рисования вынести в отдельный метод, в который в качестве параметров передавать значения, определяющие какую область нужно выводить.

Добавлено через 2 минуты и 32 секунды
не обновил страницу перед отправкой поста...
смотри как много у тебя повторяющихся блоков, вынеси все в отдельный метод и вызывай его в нужных местах. в параметрах передавай то чем блоки отличаются друг от друга

Добавлено через 4 минуты и 39 секунд
кстати, забываю спросить, а зачем тебе именно дробные значения в циклах?
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



дело в том, что методы пока для меня ещё не изученная область.. вот.. 
насчёт "i" я думал, но ничего не придумал.
Так что пока только так. 
А дробные значения - это уже нюансы построения этого множества Мандельброта, так что я не знаю этого. 

Это сообщение отредактировал(а) massimo2 - 8.8.2011, 18:23
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



ну даже если так:
Код

namespace Ch04Ex06
{
    class Program
    {
        static void Main(string[] args)
        {
            double realCoord = -0.6, imagCoord = 1.2;
            int f1;
            Program.DrawPicture(imagCoord, realCoord, 0.05, 0.03);
            while (true)
            {
                Console.WriteLine("Какую часть рисунка показать: 1 - нижняя половина, 2 - верхняя половина, 3 - верхняя правая четверть");
                f1 = Convert.ToInt32(Console.ReadLine());
                switch (f1)
                {
                    case 1:
                            DrawPicture(0.0, -0.6, 0.05, 0.03);
                            break;
                    case 2:
                            DrawPicture(1.2, -0.6, 0.05, 0.03);
                            break;
                    case 3:
                            DrawPicture(1.2, 0.6, 0.021, 0.0150);
                            break;
                }
            }
        }
        public static void DrawPicture(double _imagCoord, double _realCoord, double imagK, double realK)
        {
            for (double imagCoord = _imagCoord; imagCoord >= -1.2; imagCoord -= imagK)
            {
                for (double realCoord = _realCoord; realCoord <= 1.77; realCoord += realK)
                {
                    int iterations = 0;
                    double realTemp = realCoord;
                    double imagTemp = imagCoord;
                    double arg = (realCoord * realCoord) + (imagCoord * imagCoord);
                    while ((arg < 4) && (iterations < 40))
                    {
                        double realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp) - realCoord;
                        imagTemp = (2 * realTemp * imagTemp) - imagCoord;
                        realTemp = realTemp2;
                        arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                        iterations += 1;
                    }
                    switch (iterations % 4)
                    {
                        case 0:
                            Console.Write(".");
                            break;
                        case 1:
                            Console.Write("0");
                            break;
                        case 2:
                            Console.Write("0");
                            break;
                        case 3:
                            Console.Write("8");
                            break;
                    }
                } Console.Write("\n");
            }
        }
    }
}

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

Цитата(massimo2 @  8.8.2011,  17:11 Найти цитируемый пост)
дело в том, что методы пока для меня ещё не изученная область

это нужно было выучить раньше всего, что такое класс и что такое метод, без этого дальше нельзя учить.


Это сообщение отредактировал(а) Экскалупатор - 8.8.2011, 18:50
PM MAIL ICQ   Вверх
massimo2
Дата 8.8.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



значит у Ватсона своя метода изложения
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.8.2011, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(massimo2 @  8.8.2011,  18:07 Найти цитируемый пост)
значит у Ватсона своя метода изложения 

повторюсь я не читал, так что не знаю как он излагает, но по опыту могу сказать что до изучения методов в книгах, обычно(!), примеры не сложнее Hello World, а этот пример сложнее, значит, скорее всего, ты его придумал сам(молодец, на интересных задачах быстрее научишься), но к такому уровню уже нужно знать что такое классы и методы, почитай отдельно и будет тебе счастье. станет намного проще писать.
PM MAIL ICQ   Вверх
massimo2
Дата 9.8.2011, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



После прочтения очередной главы новые упражнения:
1. Какие из приведенных ниже преобразований не могут выполняться неявно?
   а) int в short
   b) short в int
   c) bool  в string
   d) byte в  float
Мой ответ : a, c

2. Напишите программу, в которой описывается перечислимый тип color, использующий в качестве базового типа short и содержащий все цвета радуги, а также белый и чёрный. Может ли для такого перечислимого типа в качестве базового использоваться тип byte?

Насчёт программы я не совсем понял что требуется, но написал вот такую (по аналогии с приводимым в книге примером):
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Упражнение2
{
    enum color : short
    {
        yellow,
        red,
        green,
        blue,
        orange,
        purple,
        brown,
        black,
        white
    }
        class Program
        {
        
            static void Main(string[] args)
            {
                Console.WriteLine("Это прога для описания перечислимого типа color");
                color col = color.black;
                Console.WriteLine("Это цвет \"{0}\"", col);
                short colShort;
                string colString;
                colShort = (short)col;
                colString = Convert.ToString(col);
                Console.WriteLine("Численный(short) эквивалент = {0}", colShort);
                Console.WriteLine("Строчный(string) эквивалент = {0}", colString);
            }
    }
}

 а ответ на вопрос: конечно может.

И ещё вопрос: возможно ли вывести на экран все значения типа по порядку?

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

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


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

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


 




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


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

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