Loading...
aurora96 avatar aurora96 2 Точки

Помощ със задача 10 от книгата "Въведение в Програмирането с C#".

Здравейте колеги, поразрових се из форума, гугъл но за съжаление не успях да намеря подобна тема, затова пускам своята.
Условието на задачата е: Напишете програма, която извежда първите 100 члена на редицата: 2, -3, 4, -5, 6 , -7 , 8.

Намерих решението което е :

using System;

 

class PrintSequenceApp

{

  

    static void Main()

    {

        for (int i = 0; i < 100; i++)

        {

            if (i % 2 == 0)

            {

                Console.Write("{0,4} ", i + 2);

            }

            else

            {

                Console.Write("{0,4} ", -(i + 2));

            }

        }

        Console.WriteLine();

    }

 

}

Компилира се без проблем но аз не мога да разбера как точно се решава, знам какво е console.write, writeline но не разбирам от къде идва това 0,4 , % от 2 и т.н.
for (int i = 0; i < 100; i++) това си го обяснявам, като i = 0 т.е. всички числа са = на 0, следователно всичко да е по-малко от 100 и да нараства до 100.
Надявам се да ми помогнете, благодаря.

Тагове:
0
Programming Basics
BTreppechov avatar BTreppechov 5 Точки

Здравей,доколкото виждам трябва да принтираш числата на редица , в зависимост дали са Odd и да ги изпишеш позитивни или Even и да ги изпишеш отрицателни.

Т.е  -ако са Even делиш числото на 2 ,което трябва да няма остатък. Т.е  i % 2 == 0;

     - ако са Odd ,обратното , т.е правиш един if , else . Ако се дели даденото число без остатък,е положително , ако  се дели с остатък , отрицателно.

А това 0,4 е просто да го принтираш по-красиво в дадения случай, а не слято.Напиши placeholder c# в google ,ако се интересуваш.

Поздрави.

1
aurora96 avatar aurora96 2 Точки

Прочетох отговорът Ви, но въобще не мога да разбера как се случва всичко това, ако е възможно може ли да ми пишете по скайп : nikol4o9681 

0
DiyanTonchev92 avatar DiyanTonchev92 231 Точки

Eто ти едно решение =>  http://pastebin.com/dEZsE6Mw (закоментираното е малко по-цивилизовано решение)

0
evvladimirov avatar evvladimirov -2 Точки

Привет,

Console.Write e метод (според мен не е лошо в случая да си го представим като функция), чиято основна цел е да отпечата зададения параметър (в скобите, в случая настоящата стойност на боряча на цикъла). Преди него обаче може да се зададе като друг параметър - формата, под който да се отпечатват отделните стойности (ей тука съм гепил един линк от подобна тема в stackoverflow - http://www.dylanbeattie.net/cheatsheets/dot_net_string_format_cheat_sheet.pdf). Разгледай го, поиграй си в задачката и мисля, че ще придобиеш достатъчно интуитивна представа какво представлява {0,4} като параметър на горния метод. Сам си разгадай какво е 0 и какво е 4, за да не ти отнемам удоволствието :P

По-здрав. :)

0
05/07/2015 23:28:22
fredddy avatar fredddy 27 Точки

Здравей!  Значи това за което питаш Console.Writeline({0,4},i) се нарича както колегата е казал placeholder основно "{0}" означава че ще ти принтира стойноста на променливата, която е първа след края на кавичките в случая ,i.  В един ред можеш да принтираш много променливи напр. Console.WriteLine("Prime numbers less than 10: {0}, {1}, {2}, {3}, {4}", 1, 2, 3, 5, 7);

{0,4} в плейсхолдера означва да има разстояние след изписването на променливата 4 символа и е като  "{0}    "

for (int i = 0; i < 100; i++) това се нарича цикъл ще го срещнеш малко по нататъка в книгата, но най общо казано върти за променливата i като и сменя последователно стойноста от 0 до 100 и прави нещо в къдравите скоби отдолу. В случая понеже от условито се изискват първите 100 члена за това цикъла е о 0 до 100 но е малко объркващо понеже после се налага да добавя на всяко завъртане +2 към стойноста на i защо първия член на редицата по условие е 2 но от това просто няма смисъл. По правилно според мен е цикъла да се завърти така 
   for (int i = 2; i < 102; i++)

        {

            if (i % 2 == 0)

            {

                Console.Write("{0,4} ", i );

            }

            else

            {

                Console.Write("{0}    ", -i );

            }

        }

        Console.WriteLine();

 

0
05/07/2015 23:34:25
aurora96 avatar aurora96 2 Точки

Благодаря на всички, не разбрах нищо. :D Ще прочета главите в книгата от 1 до 6-та глава която се пада "Цикли".

0
DiyanTonchev92 avatar DiyanTonchev92 231 Точки

По-добре първо изгледай видеата от Programing Basics, след това прочети главите, след това се опитай пак, и чак тогава питай във форума. Всеки ще ти отговори по негов си начин и ще ти даде различно решение, което само ще те обърка, особено когато си начинаещ. Отделно, човекът от форума няма как да знае какво ти знаеш и какво не, че да се съобрази. :)

0
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Здравей.

Това е малко по опростено мисля, че ще го схванеш по лесно.

1 for (int i = 2; i < 102; i++)
2        {
3            if (i % 2 == 0)
4            {
5                Console.Write(i + " ");
6            }
7            else
8            {
9                Console.Write(-i + " ");          

10          }

11      }
12          Console.WriteLine();

 

Първо да уточня... for цикъла се състой от 3 елемента ако мога така да ги нарека. Първият елемент е задаването на стойност на целочислена променлива , която всъщност е нашият брояч за този цикъл ( Int i = 2 в този случай) т.е броячът започва от 2. Във втория елемент задаваме проверка която да се изпълнява след всяко едно завъртане на цикъла ( i < 102 ), което означава че стигне ли броячът до стойност различна от i < 102 нашия цикъл приключва. Третия задължителен елемент е този в който задаваме стъпка с коята броячът ни ( i ) да се увеличава ( i++) което е еквивалентно на ( i + 1) т.е след всяко завъртане (итерация) на цикъла стойността на броячът ще се увеличава с 1.

 

На ред 1 започва цикъла като първо се задава стойност на i (int i = 2), след това се изпълнява проверката ( i < 102 ) ако проверката е вярна програмата влиза в тялото на цикъла , което е всичко между отварящата { и затварящата } фигурни скоби на цикъла.

 

На ред 3 имаме проверка if ( i % 2 == 0 ) , която гласи " Ако остатъкът от делението на i с 2 е равен на 0" проверката е вярна. Операторът % при аритметични операции означава остатък от деление. Това е разликата мъжу / и %. Операторът / връща резултатът от делението напр. 4 / 2 = 2 , а операторът % връща самия остатък напр. 4 % 2 = 0 , защото остатъкът от 4 / 2 е нула.Тази проверка се прави за да разберем дали текущото число е четно или нечетно. Знаем , че всяко четно число разделено на 2 дава остатък нула, ние искаме да отпечатаме всички четни числа като положителни, затова ако числото е четно влизаме тялото на проверката (ред 5) и отпечатваме на конзолата числото + един интервал след него за да могат числата ни да изглеждат разделени едно от друго на конзолата.

Ако проверката на ред 3 не е вярна т.е единствената възможност да не е вярна е ако числото разделено остатъчно на 2 е различно от нула, което означава , че числото ни е нечетно. Отиваме на ред 7 влизаме в else тялото и отпечатваме числото с отрицателен знак.

 

Следващата стъпка е броячът ни който всъщност е и числото с което работим ... да се увеличи с 1 да се изпълни проверката на цикъла и той да започне отначало и така докато числото ни стане различно от ( i < 102 ).

 

След края на целия цикъл се отпечатва един нов ред за да изглежда изходът по добре и програмата приключва :) Надявам се да си успял да разбереш написаното и аз да съм успял да помогна. Книгата на Наков ще ти помогне страшно много. В подробности какво е това {0,4}  , i + 2 и т.н. ще разбереш от нея. Моята препоръка е ако не си се запознал с материала до цикли да го прочетеш внимателно и да потренираш и всичко ще ти се изясни. Поздрави и успехи за напред.

 

 

 

0
06/07/2015 01:38:49
fredddy avatar fredddy 27 Точки
Колега с ( i +1) ще получиш безкраен цикъл, защото не присвояваш стойност а само събираш. Трябва да е присвояваш стойност (i = I+1)
-2
Kosta.Kanev avatar Kosta.Kanev 27 Точки

С ( i + 1 ) програмата въобще няма да се компилира. Написал съм го за да бъде по разбираемо, за да се разбере че на всяко завъртане трябва да се увеличава с единица. Когато стигне до операторите ще му стане ясно какво е i + 1 , i = i + 1. Може и ( i += 1 ) ако щеш , но човекът няма да го разбере при положение , че не е научил материала до циклите. Нарочно не навлизам в такива подробности! На този етап мисля , че няма смисъл.

0
aurora96 avatar aurora96 2 Точки

Kosta.Kanev,
Извинявай решението ти има "if" и "else" ,би ли ми обяснил какво е "if" и "else" и какво правят/как се ползват ? В книгата от примитивни типове и променливи (2ра глава) също ги има на едно място но не е обяснено. (:

0
06/07/2015 18:48:52
mmirchev avatar mmirchev 5 Точки

Здравей,

Ето как съм решил тази задача laugh

1.Правиш една променлива, която ти съдържа числото, от което ти започва числовата редица.

2. Правиш втора променлива и й задаваш да е равна на 1-вата, колкото да се инициализира с дадената стойност.(Тази втората променлива ще използваш за да отпечатваш стойностите в конзолата)

3. Правиш си трета променлива, на която просвояваш стойност -1, с това -1 ще сменяш знака на всяко следващо число при завъртане на цикъла.

А именно:

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

namespace SequenceOfThousandNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            int firstNumber = 2;
            int currentNumber = firstNumber;
            int signChange = -1;
            for (int i = 0; i < 100; i++)
            {               
                Console.Write(currentNumber + ", ");
                firstNumber++;
                currentNumber = firstNumber * signChange;
                signChange = signChange * -1;                                              
            }
        }
    }
}

0
Rextor92 avatar Rextor92 149 Точки

mmirchev , реално нямаш нужда нито от currentNumber, нито от signChange. Ако проверяваш за остатък при делене на две използваш Console.Write(number) или Console.Write(-number), по твоя начин върши работа само Console.Write(number); number=-number; number++; в цикъл.

Може да прочетете за тернарния оператор ?: тук . Моето решение го използва, изглежда така

static void Main(string[] args)
    {
        int number = 2;
        for (int i = 0; i &amp;lt; 10; i++)
        {
            Console.Write((number % 2 == 0) ? number : -number);
            if (i != 9)
            {
                Console.Write(", ");
            }
            number++;
        }
    } // еnd main

 

2
06/07/2015 22:12:24
g_todorov avatar g_todorov 106 Точки

здравей aurora96,

накратко задачата се решава с for цикъл. Обичайно този тип цикли съдържат 3 елемента:

1.начало на цикъла( int i=0; в конкретния случай) - почва от 0    

2.брояч на цикъла( i<100; в конкретния случай) - докато i<100 цикълът ще се върти( до 99)

3.стъпка на цикъла (i++ в конкретния случай е 1) 

за повече информация по циклите изгледай лекция Loops от предни инициализации на курса.

if конструкция - ако в скобите условието е вярно се изпълнява първото поместено между къдравите скоби и се прескача поместеното във вторите къдрави скоби, ако не е вярно условието се изпълнява помесетното във вторите къдрави скоби.

Условието if(i % 2 ==0) означава, че при всяко поредно завъртане на цикъла i нараства с 1 прави се остатъчно деление на 2(взема се само остатъка от делението - това след дес. запетая) и ако остатъкът е идентичен (==) на 0 (тоест четно) се изпълнява това между първите къдрави скоби, ако не е изпълнено условието се изпълнява поместеното между 2-рите къдрави. 

Console.Write - означава изпиши на същия ред.  

"{0,4}", i+2 Това е т.нар. place-holder - на мястото на 0 м/у къдравите скоби конзолата изчислява и  изписва това което се намира веднага след запетаята, в случая формулата i+2, а 4 вътре в къдравите скоби сочи колко спейса да изпише конзолата преди да изчисли и отпечати формулката (служи за по-естетично изглеждащ резултат - махни 4 и запетаята преди нея и пробвай да видиш)

Успех!

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.