Loading...
onefen avatar onefen 27 Точки

Homework Introduction to Programming Problem 16

Здравейте имам проблем с последната задача 16 - дълата редица от числа където се искаха първите 1000 члена на редицата: Използвам следния код:

using System;

class PrintLongSequence
{
    static void Main ()
    {
        for (int i = 2, j = -3; i<= 1000; i = i + 2, j = j - 2)
        {
            Console.WriteLine(i);
            Console.WriteLine(j);
        }
    }
}

Когато го стартирам редицата започва от -703 и 704. Това са първите цифри които ми изписва. Позлвам същия код и в задача 9 (същата редица но само пъривте 10 цифри (i <= 10)) и там кода работи перфектно. Като си пусна с дебугера програмата виждам, че променливите се смятат правилно 2 -3 -4 -5 и тн., но защо не ми изкарава цялата редица на конзолата?

Тагове:
0
Programming Basics
DHristoskov avatar DHristoskov 211 Точки

А според мен така е дори по лесно.

for (int i = 2; i <= 1000; ++i)

  {
                if (i % 2 == 0)
                {
                    Console.Write(i + "; ");
                }
                else
                {
                    Console.Write(-i+"; " );

}

2
onefen avatar onefen 27 Точки

i %2 == 0

+ii

Какво точно означават тези изрази че не са ми много ясни

1
g.stoyanov avatar g.stoyanov 776 Точки

i %2 == 0 - делим i  на 2 без остатък и проверяваме дали резултата е равен на 0;

+ii предполагам че имаш в предвид ++i - увеличаваме i  с едно преди да го използваме, ето и примери за да разбереш разликите м/у ++i и i++:

 

i = 1;

Console.WriteLine(++i); // отпечатва 2

 

i = 1;

Console.WriteLine(i++); // отпечатва 1

 

i = 1;

Console.WriteLine(++i); // отпечатва 2

Console.WriteLine(i++); // отпечатва 2

Console.WriteLine(i++); // отпечатва 3

 

i = 1;

Console.WriteLine(i++); // отпечатва 1

Console.WriteLine(++i); // отпечатва 3

Console.WriteLine(++i); // отпечатва 4

Console.WriteLine(i); // отпечатва 4

Console.WriteLine(i++); // отпечатва 4

Console.WriteLine(i); // отпечатва 5

 

4
DHristoskov avatar DHristoskov 211 Точки

Извинявам се ,че не съм написал коментар към примера си ,но както виждам g.stoyanov е обяснил много по-добре от колкото аз бих го направил.

0
alerionx3 avatar alerionx3 0 Точки

Ето и един пример с while: :)

int counter = 2;
while (counter<1000)
{
     if (counter%2==0)
     {
          Console.Write(counter+" ");
     }
     else
     {
         Console.Write(counter*(-1)+" ");
     }
     counter++;
}

0
25/02/2015 22:34:53
Alezard avatar Alezard 7 Точки

Само да вмъкна, за да бъдат отпечатани първите 1000 числа, горната граница трябва да е <= 1001, щом се тръгва от 2. Ако са до 1000, се получават 999 числа и условието не е спазено.

Поздрави.

2
DHristoskov avatar DHristoskov 211 Точки

Ами не си прав защото при i<=1000 значи че цикъла ще върти до 1000 включително от 2....=1000 ,ако напишеш 1001 цикъла ще се върти до 1001,ако в задачата беше написано i<1000,тогава цикъла ще се върти до 999 и наистина трябва да бъде поставено i<1001.

Не ме бива много в обясненията дано съм успял да се изразя добре ,за да ме разбереш.

П.С.Но ако имаш в предвид решението на alerionx  си абсолютно прав и се извинявам за кометара ми.Тъй като отговора ти не е насочен като кометар към решението на alerionx,излгежда че коментираш основната тема.

0
26/02/2015 11:05:50
Alezard avatar Alezard 7 Точки

Коментара беше към всички. Водя се по условието, което е първите 1000 члена на редицата от 2 нататък, а не да изкара редицата до 1000.  Ако сложиш един брояч в дъното на for цикъла си и го принтираш ще видиш, че в този си вид, кода ти ще изкара 999 члена. На моя код сложих, за да не стават обърквания и ниски точки на домашното ;д Може да се направи или i < 1002, или i <= 1001. И двете дават един и същи резултат.

Пояснение за не знаещите как се прави брояч:

int count = 0;

for(...)

{

    //Some code here.

    count++;

}

Console.WriteLine("Count = " + count);

Това ще изкара директно колко броя пъти for цикъла е правил завъртания. Пробвайте, ако не вярвате.

2
DHristoskov avatar DHristoskov 211 Точки

 

Write a program that prints the first 1000 members of the sequence: 2, -3, 4, -5, 6, -7, … You might need to learn how to use loops in C# (search in Internet).

 

Ако ползваш този вариант не ти е нужен caunter няма защо да броиш завъртанията на цикъла,защото със задаването на  for ти казваш точно колко пъти той да се завърти а имено от 2......<=1000 (до 1000 включително имаш знак равно),a counter ти се явява ++i където то се увеличава с едно на всяко завъртане на цикъла ,докъто стане равно на 1000.И така няма да печаташ до 999, а до 1000.

for (int i = 2; i <= 1000; ++i)

  {
                if (i % 2 == 0)
                {
                    Console.Write(i + "; ");
                }
                else
                {
                    Console.Write(-i+"; " );

}

Можеш да проваш този вариант и ще се обедиш че работи.

Отговорът ще бъде:2; -3; 4; -5; 6; -7;.........1000(включително)

0
a_tifonoff avatar a_tifonoff 26 Точки

Добави си това в цикъла след втория ConsoleWrite i ще разбереш: Console.Beep(100, 100);

0
enipchela avatar enipchela 0 Точки

Не разбрах защо редицата започва от -703. При мен се получава същото. В публикуваното решение на Hristoskov също започва от -703. Някой може ли да обясни?

0
a_tifonoff avatar a_tifonoff 26 Точки

Ще пробвам пак. Предполагам че ако добавиш Console.Beep(100, 100); в цикъла ще се разбере веднага.

for (int i = 2, j = -3; i <= 1000; i = i + 2, j = j - 2)
{
Console.WriteLine(i);
Console.WriteLine(j);
Console.Beep(100, 100);
}

 

1
26/02/2015 11:42:17
DHristoskov avatar DHristoskov 211 Точки

Провери из форума има доста теми за Consol Printing Limit конзолата има лимит и за това не виждаш целия резултат

0
ZlatinDimitrov avatar ZlatinDimitrov 11 Точки

Най-вероятно е от properties на конзолата ти.Десен бутон на конзолата-properties-buffersize.

Успех!

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