Loading...
XmUrF avatar XmUrF 363 Точки

[Homework] C# Basics - Introduction To Programming - Problem 15-16*

Здравейте!

Питането ми е във връзка с това, че ако се използва Console.WriteLine, тъй като принтването на 1000 реда е твърде много, конзолата поне при мен изкарва числата след ~700. Затова аз лично използвах Console.Write, за да може да се събере цялата поредица на един екран.

Въпросът ми е има ли начин да се направи и с Console.WriteLine и ако да, как?

Тагове:
1
Programming Basics 20/10/2014 19:05:26
ViValDam avatar ViValDam 15 Точки

ЕТО Я И МОЯТА 16 ЗАДАЧА :

работи си чудесно с един единствен цикъл

class PrintSequenceOf1000

{ //Problem 16. * Print Long Sequence
//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).

static void Main()
{
int positiveMember = 2;
int negativeMember = -3;

Console.Write(positiveMember + ", ");
Console.Write(negativeMember + ", ");

for (int i = 0; i < 498; i++)
{
Console.Write((positiveMember+=2) + ", ");
Console.Write((negativeMember-=2) + ", ");
}


Console.Write((positiveMember+=2) + ", ");
Console.Write(negativeMember-=2);

Console.Read();

}
}



























1
olebg avatar olebg 2 Точки

Аз го написах така


Snippet

for (BigInteger i = 2; i < 1002; i++)
        {
            if (i % 2 == 0)
            {
                Console.Write(i);
            }
            else
            {
                Console.Write(-i);
            }
        }

 


И работи, обаче ги изкарва наред, без всяко да е на нов ред. Ако напиша WriteLine, вместо Write и почва, както е написал по-горе колегата от 700 да ги изкарва на конзолата. Защо е така?

0
Fleshian avatar Fleshian 379 Точки

Здравейте, ето го и моето възможно най-семпло решение което успях да намеря.
Използвах оператора  ? : който работи така:
Проверява дали израза преди ? е верен, и ако е верен(true) ти връща резултат преди двуетoчието
а ако не е верен резултата след двоеотчието. Тоя оператор го ползвам когато имам нужда само от
една 

(сравнителен израз) ? (вярно) : (грешно)
string trueOrNot =  2 + 3 == 4 ? "BRAVO WE" : "PO SKORO NE" ;
В случая стринга ще придобие стойността след двоеточието тъй като израза не е верен.

Console.WriteLine("Is 2 + 3 = 4  ? {0}", trueOrNot);
// Is 2 + 3 = 4 ? PO SKORO NE
Това моето решение е на задачат:

for (int i = 2  ; i <= 1001 ; i++)
{

      Console.WritLine(i % 2 == 0 ? i : -i)      
}




1
ViValDam avatar ViValDam 15 Точки

Защо търсиш решения , а не помислиш малко - задачата се решава с един единствен цикъл и това даже е споменато в нея !

Имаш грешки в кода WriteLine, not   WritLine and  ';'  after sentence 

take out line from WriteLine to print at the same line

Here is your code in a write way:

for (int i = 2; i < 1001; i++)
{

Console.Write(( i % 2 == 0 ? i : -i) + ", ");

}
Console.WriteLine(-1001);


Console.ReadLine();






1
ViValDam avatar ViValDam 15 Точки

Имаш грешки в синтаксиса :

Console.WritеLine(i % 2 == 0 ? i : -i) ;  

а не Console.WritLine(i % 2 == 0 ? i : -i)

  

Ето така работи правилно това ,което си написал:

for (int i = 2; i < 1001; i++)
{

Console.Write((i % 2 == 0 ?  i : -i)  +  ", ");

}
Console.WriteLine(-1001);


Console.ReadLine();



Последният ред е извън цикъла , само за да не се отпечата запетайка след последното число, затова го отхпечатваме отделно - но това ще го учим на 3 -та лекция !




1
ViValDam avatar ViValDam 15 Точки

Имаш синтактични грешки !

Работеща програма по твойта идея и без запетайка след последният член на редицата е :

for (int i = 2; i < 1001; i++)
{

Console.Write((i % 2 == 0 ? i : -i) + ", ");

}
  Console.Writе(-1001);





1
ViValDam avatar ViValDam 15 Точки

Ами начина е да махнеш лайн и ти си го направил Console.Write() продължава да си печата на същият ред , а   Console.WriteLine()  отива на следващият ред - следващият лайн - точно в това им е разликата .

това ще го учим в темата за конзолата инпут и аутпут

1
ViValDam avatar ViValDam 15 Точки
няма , правилно си го направил - двете команди са еднакви , просто тази с лайн прескача на следващият ред, а тази без лайн продължава да пищше на същият
1
ViValDam avatar ViValDam 15 Точки

По идея на колегата divery ,

ето още един вариант на задача 16 - с  while цикъл:

int StartOne = 2;
int StartTwo =-3;

while ((StartOne <= 1000 ) && (StartTwo > - 1001))
{
Console.Write(StartOne + ", ");
Console.Write(StartTwo + ", ");
StartOne = StartOne + 2;
StartTwo = StartTwo - 2;
}
Console.Write( 1000 + ", ");
Console.Write(-1001);

// последните две числа са отпечатани извън цикъла, само заради финалната запетайка -

//за да не се отпечатва запетайка на края на редицата
































1
ViValDam avatar ViValDam 15 Точки

Още един вариант - с  цикъл и без запетая накрая :

int positiveMember = 0;
int negativeMember = -1;

for (int i = 0; i <= 498; i++)
{
Console.Write((positiveMember += 2) + ", ");
Console.Write((negativeMember -= 2) + ", ");
}

Console.Write((positiveMember += 2) + ", ");
Console.Write(negativeMember -= 2);









1
mzografski avatar mzografski 189 Точки

Добави :
Console.SetBufferSize(Console.BufferWidth, 32766);
Това увеличава буфера на конзолата -> MSDN, Stackoverflow

1
Annie avatar Annie 89 Точки

Благодаря много! Имах същия проблем и това го разреши. smile

0
milenrab97 avatar milenrab97 2 Точки

Ето малко по-различно решение, с по-различна идея.


0
georgi.b.stoilov avatar georgi.b.stoilov 6 Точки

Ами малко си поиграх да форматирам:

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

using System;

class Sequence
{
    static void Main()
    {
        int sequenceElement = 2;
        int upperLimit = 1000;
        for (int i = 0; i < upperLimit; i++)
        {
            if ((i + 1) % 10 == 0)
            {
                if ((i+1) == upperLimit)
                {
                    Console.WriteLine(Math.Pow(-1, i) * (sequenceElement + i));
                }
                else
                {
                    Console.WriteLine((Math.Pow(-1, i) * (sequenceElement + i)) + ",");
                }
            }
            else
            {
                Console.Write(Math.Pow(-1, i) * (sequenceElement + i));
                Console.Write(" , ");

            }
        }
    }
}


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