Pętla for i klepsydra

0

Witam a wieć musze zrobić z * klepsydre * * * * *
<ort>* * * * *



 * *
  *
* *


        • *</ort>
          na razie udało mi sie zrobic cos takiego :
public class Zad5{
public static void main(String[] args){
		for (int j = 10; j>0; j--)
	{
		for(int i = 0; i< j; i++){
			System.out.print("*");
	
		}
		System.out.print(" "+"\n");
	
	
	}
	
	for(int a = 1; a <= 10; a++){
		
		for(int b = 0; b < a; b++)
			System.out.print("*");
		System.out.print("\n");
	}
		System.out.print("\n");

Pytanie jak za każda nowa linia ma się robic kolejna spacja ?

0

klepsydra ma wygladac tak

 * * * * *
  * * * *
   * * *
     * *
      *
    * *
   * * *
 * * * *
* * * * *
0

tak się skopiowała dziwnie :P

0

Pytanie jak za każda nowa linia ma się robic kolejna spacja

Nie „kolejna”, tylko o jedną więcej niż w poprzedniej linii.

?

Nie stawiamy spacji przed znakiem zapytania.

1
import java.util.*;
public class Zad5
{
    public static void main(String[] args)
    {
        String[] stars = new String[9];
        StringBuilder sb = new StringBuilder("*");
        for(int i=8;i>=0;i--)
        {
            stars[i] = sb.toString();
            sb.append("**");
        }
        String[] spaces = new String[9];
        sb = new StringBuilder("");
        for(int i=0;i<9;i++)
        {
            spaces[i] = sb.toString();
            sb.append(" ");
        }        
        for(int i=0;i<9;i++)
        {
            System.out.println(spaces[i]+stars[i]);
        }
        for(int i=7;i>=0;i--)
        {
            System.out.println(spaces[i]+stars[i]);
        }        
    }
}
0

wszystko bardzo dobrze wychodz, tyle ze jak wykladowca mnie zapyta jak ona działa nie bede wiedział :P jest mozliwosc przetworzyc jakos mój kod ?

0

Pewnie tak, ale ja tego nie zrobię.
Przed znakiem zapytania nie stawiamy spacji.

0

ok dzieki

0

Witam
Czasami zaglądam na forum i próbuje rozwiazać problemy forumowiczów. Z samym rozwiązaniem problemów nie mam lecz bardziej z sposobem rozwiązania. Program podzieliłem na góre
i dół. W zależności od liczby poczatkowych gwiazdek rysuje mi klepsydre. Lecz sam kod brzydko wygląda. Jak można klepsydre umieścić w jednym forze? Wiem że można zrobić funkcje
writeSandglass(enum part) i w zależności od partu dawać inne warunki ale ciekaw jestem jak to zrobić w jednym forze:

#include <iostream>
#include <math.h>
using namespace std;

int main() {
	int stars = 0;
	int spaces = 0;
	
	const int starsStart = 10;
	
	int sandglassHeight = starsStart * 2 - 1;
	
	for(int i=0; i< starsStart; i++){
		stars = starsStart - i;
		spaces = i;
		for (int k=0; k< spaces; k++){
			cout << " ";
		}
		for(int j=0; j<stars; j++){
			cout << "* ";
		}
		for (int k=0; k< stars; k++){
			cout << " ";
		}
		cout<< endl;
	}
	for(int i=2; i< starsStart + 1; i++){
		stars = i;
		spaces = starsStart - i;
		for (int k=0; k< spaces; k++){
			cout << " ";
		}
		for(int j=0; j<stars; j++){
			cout << "* ";
		}
		for (int k=0; k< stars; k++){
			cout << " ";
		}
		cout<< endl;
	}
	
	return 0;
}
0

srry za te fory na koncu które rysuja spacje, musze sie wreszcie kiedys zarejestrowac i miec mozliwosc edycji postów ;>

0

Poprawiłem ten kod. Kod chyba łatwiejszy do zrozumienia niż ten z macierzami, i łatwo go można przekleić na jave. Lecz wydaje mi się że nie istnieje magiczny for który by 2 części robił za jednym razem :(

#include <iostream>

using namespace std;
 
int main() {
    int stars = 0;
    int spaces = 0;
 
    const int starsStart = 10;
 
    int sandglassHeight = starsStart * 2 - 1;
 
    for(int i=0; i< starsStart; i++){ //gora
        stars = starsStart - i;
        spaces = i;
        for (int k=0; k< spaces; k++){
            cout << " ";
        }
        for(int j=0; j<stars; j++){
            cout << "* ";
        }
        cout<< endl;
    }
    for(int i=2; i< starsStart + 1; i++){ //dol
        stars = i;
        spaces = starsStart - i;
        for (int k=0; k< spaces; k++){
            cout << " ";
        }
        for(int j=0; j<stars; j++){
            cout << "* ";
        }
        cout<< endl;
    }
 
    return 0;
}
0

tylko, że w C#, a nie lepiej dodać if-y w petach i wtedy wystarczy po 2 fory,

int stars = 11;
            string line = string.Empty;
            for (int i = 0; i <= (stars/2); i++)
            {
                line = string.Empty;
                for (int j = 0; j <= stars; j++)
                {
                    if (j < i || j>=(stars-i))
                    {
                        line += " ";
                    }
                    else
                    { 
                    line += "*";
                    }
                }
                
                if (!string.IsNullOrWhiteSpace(line) )
                { 
                 Console.WriteLine(line);
                }
            }
           
            for (int i = stars/2-1; i >=0; i--)
            {
                line = string.Empty;
                for (int j = stars; j >=0; j--)
                {
                    if (j <= i || j > (stars - i))
                    {
                        line += " ";
                    }
                    else
                    {
                        line += "*";
                    }
                }
                if (!string.IsNullOrWhiteSpace(line))
                { 
                Console.WriteLine(line);
                }
            }
            Console.ReadLine();

1 użytkowników online, w tym zalogowanych: 0, gości: 1