Професионална програма
Loading...
+ Нов въпрос
borislav9212 avatar borislav9212 743 Точки

Drawing with Loops Exercises - Diamond

Колеги може ли за малко помощ. при четните числа всичко е ок, задачата работи. При нечетните не мога да измисля как да напиша последния ред ето ми кода   http://pastebin.com/rj7VuTXc

Тагове:
0
Programming Basics 11/03/2016 20:55:50
BonchoBelutov avatar BonchoBelutov 2 Точки

Здравей колега още не съм стигнал до тази задача, но от условието е видно, че още в самото начало след If-else  проверка дали въведеното число е четно или нечетно и по голямо от 2 ще пишеш кода. За случайте при n=1 или n=2 принтираш Console.WriteLine(new string('*'),n);  Задачата е комбинация от кода на задача

3.   Квадрат от звездички и 6.Ромбче от звездички.

Пробвай да опростиш своето решение или започни наново. С два Loop цикъла вързани с N ще я решиш много лесно.Успех и като стигна до нея ще ти пиша пак.

0
11/03/2016 21:11:11
Ralitsa88 avatar Ralitsa88 3 Точки

Здравейте колеги,

моля за помощ!

6-та задача - "Ромбче от звездички" ми се получи до толкова, че печатам на пръв поглед желания резултат, но не на необходимата позиция и с необходимото пространство между звездичките. Ще се радвам ако някои има възможност да погледне и коментира. Ето линк към кода: http://pastebin.com/aTrgaN7r

Предварително благодаря :)

0
22/04/2016 21:38:52
borislav9212 avatar borislav9212 743 Точки

Изместила си ромбчето надолу, затова предполагам ти дава грешка. С new string според мен е много по-лесно.

Виж и моето решение. http://pastebin.com/KQCU9492

2
Ralitsa88 avatar Ralitsa88 3 Точки

Здравей колега, наистина по-надолу се печата, за това не се зачита от judge-a; успях да го повдигна, но space-овете сега не са както трябва...

Благодаря, че сподели твоето решение, ти си го направил дори по-лесно от примера :), стана ми доста по-ясно, определно е по-лесно с new string :) 

Благодаря!

1
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

Колега, на ред 66 и 68 вместо new string си написал директно да ти рисува само един символ. Като гледам преди това си ползвал new string, така че явно знаеш как работи, и нещо си загубил концентрация и си забравил да го напишеш него. Също така препоръчвам да слагаш скоби за да показваш на програмата каква операция точно искаш да се извърши. В случая (n+1)/2 е различно от n + 1/2. Ред 66 до 69 трябва да изглеждат ето така:

            Console.Write(new string('-', (n - 1) / 2));
            Console.Write('*');
            Console.Write(new string('-', (n - 1) / 2));
            Console.WriteLine();

4
borislav9212 avatar borislav9212 743 Точки

Колега, благодаря ти за отговора. Разконцентрирал съм се нещо, затова съм забравил да напиша new string. А за скобите вече ще ги слагам.

0
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

Kато цяло най-важното нещо ако забравиш да напишеш new string ,няма да ти нарисува абсолютно нищо,дори изобщо може да не ти го допусне от компилатора,а относно кода ,мисля че ти е верен.

0
borislav9212 avatar borislav9212 743 Точки

Аз както го бях написал с двойни кавички се компилира от конзолата и го прочита като единичен символ без изчисленията. Но за да се прочетът изчисленичта е нужен new string и символът тук трябва да е заграден с апострофи, ако са кавички отчита грешка. Кода е верен, само тук се оматах малко и допуснах грешка, но човек се учи от грешките, другият път ще го знам и няма да допускам такива елементарни грешки.

0
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

да има разлика между ' ' и " ".Когато искаш да прочетеш нов стринг то тогава трябва да използваш единичните.

0
davichonov365 avatar davichonov365 127 Точки

А някой забеляза ли че не работи с 1 !!!

0
davichonov365 avatar davichonov365 127 Точки

Аз го натаманих малко : 

if(n==1)
                {
                    Console.WriteLine("*");
                    return;
                }

работи.. :)

0
Elena123456 avatar Elena123456 167 Точки

Здравейте, може ли малко помощ за обърнатия  цикъл в кода ми на тази задача, която е и с най-висока трудност от Глава 6.1. Вложени цикли.

Печатам  правилно само първата 1/2 от диаманта. Изписва ми ето това при опит за стартиране на програмата: Compilation error (line 23, col 14): Cannot implicitly convert type 'double' to 'int'. An explicit conversion exists (are you missing a cast?) и не мога да го оправя.

using System;
                    
public class Program
{
    public static void Main()
    {

var n= int.Parse(Console.ReadLine());
int stars=1;
if (n%2==0) {
stars=2;}   

var firstIndent=(n-stars)/2;
Console.WriteLine(new string('-',firstIndent) + new string('*',stars) + new string('-',firstIndent));
        
for(int row=0;row<Math.Floor((double)(n-1/2));row++) {
var middleIndent=stars+2*row;
Console.Write(new string('-',(firstIndent-1)-row)+"*" + new string('-',middleIndent)+"*"+(new string('-',(firstIndent-1)-row)));
Console.WriteLine();}                                                            // до тук печата правилно


for(int row2=Math.Floor((double)(n-3/2));row2>=0;row2--) {
var middleIndent2=stars+2*row2;
Console.Write(new string('-',(firstIndent-1)-row2)+"*" + new string('-',middleIndent2)+"*"+(new string('-',(firstIndent-1)-row2)));
Console.WriteLine();}        


Console.WriteLine(new string('-',firstIndent) + new string('*',stars) + new string('-',firstIndent));
}        
}


   

Ето и условието на задачата:

Пример: диамант

Да се напише програма, която въвежда цяло число n (1 ≤ n ≤ 100) и печата диамант с размер n, като в следните примери:

Вход Изход Вход Изход Вход Изход
1 * 2 ** 3 -*-
*-*
-*-
Вход Изход Вход Изход Вход Изход
4 -**-
*--*
-**-
5 --*--
-*-*-
*---*
-*-*-
--*--
6 --**--
-*--*-
*----*
-*--*-
--**--
Вход Изход Вход Изход Вход Изход
7 ---*---
--*-*--
-*---*-
*-----*
-*---*-
--*-*--
---*---
8 ---**---
--*--*--
-*----*-
*------*
-*----*-
--*--*--
---**---
9 ----*----
---*-*---
--*---*--
-*-----*-
*-------*
-*-----*-
--*---*--
---*-*---
----*----
0
21/04/2020 02:31:47
Elena123456 avatar Elena123456 167 Точки

Пипнах малко кода и вече нямам проблем с decimal и integer, но пък сега се появи друг проблем.  Въвеждам примерно n=5 и ето резултата. За жалост отново не ми печата втората част на диаманта.

5
--*--
-*-*-
*---*
Run-time exception (line 18): 'count' must be non-negative.
Parameter name: count

Stack Trace:

[System.ArgumentOutOfRangeException: 'count' must be non-negative.
Parameter name: count]
   at System.String.CtorCharCount(Char c, Int32 count)
   at Program.Main() :line 18

 

 

using System;
                    
public class Program
{
    public static void Main()
    {

var n= int.Parse(Console.ReadLine());
int stars=1;
if (n%2==0) {
stars=2;}   

var firstIndent=(n-stars)/2;
Console.WriteLine(new string('-',firstIndent) + new string('*',stars) + new string('-',firstIndent));
        
for(int row=0;row<=(n-1/2);row++) {
var middleIndent=stars+2*row;
Console.Write(new string('-',(firstIndent-1)-row)+"*" + new string('-',middleIndent)+"*"+(new string('-',(firstIndent-1)-row)));
Console.WriteLine();}                                                          


for(int row2=(n-3/2);row2>=0;row2--) {
var middleIndent2=stars+2*row2;
Console.Write(new string('-',(firstIndent-1)-row2)+"*" + new string('-',middleIndent2)+"*"+(new string('-',(firstIndent-1)-row2)));
Console.WriteLine();}

Console.WriteLine(new string('-',firstIndent) + new string('*',stars) + new string('-',firstIndent));
}        
}    

 

 

0