Stworzenie kształtu ze znaków ASCII

0

Macie jakieś pomysły, jak zrobić np kwadrat ze znaków ascii ?

1

ASCII ma tylko 128 znaków. http://www.asciitable.com/ Ja bym próbował #:

#######
#     #
#     #
#######
0

Muszą być znaki z tablicy ascii, taki mam wytyczne. może jeśli zabraknie znaków na krztłat niech program powtarza znaki od poczatku ? Jest taka opcja ?

0

Miałem na myśli 127 różnych znaków. Do rysowania wystarczy Ci jeden: #

4

Może też być np:

+---+
|   |
+---+

;]

0

A jeśli chciałbym zrobić ramke z wszystkich znaków ascii , tzn wszystkie po kolei, nie jest mi to potrzebne ale chciałbym to umiec zrobić ..., jakich pomysł ?

1

Możesz tylko za pomocą znaków drukowalnych (32-127). Wtedy w pętli (albo funktorze) musiałbyś ustawiać kolejny znak (i przekręcać przy przepełnieniu).

0

Stare wersje FAR filemanagera miały pod edytorem wywoływanym F4 dostępny prosty plugin "Draw lines" (dostępny pod F11). Nowsze chyba też to jeszcze mają. Służy on do rysowania "ramek" ze znaków ASCII. Takiej jakby pojedynczej i podwójnej linii.

Według mnie wystarczyło by sobie pospradzać jakich ASCII użyto i zrobić program rysujący żądany "ramkę"/kwadrat/prostokąt. Nie powinno to stanowić większego problemu w większości języków.

0
kq napisał(a)

Możesz tylko za pomocą znaków drukowalnych (32-127).

Niekoniecznie - żeby pytacz źle nie zrozumiał, do dyspozycji jest 128 różnych znaków, które opisuje standard ASCII; Nie wszystkie z tych znaków posiadają graficzną reprezentację, ale dużo z nich (z kodów kontrolnych) posiada; Większość znaków z przedziału od 0 do 31 posiada przypisane znaki, głównie strzałki, buźki itp. - przynajmniej w konsoli;

@bartes19 - widzę że pomysłów masz dużo więcej, niż chęci do zrobienia takiego programu; Usiądź więc i coś napisz, a pytaj ewentualnie jak coś nie będzie wychodzić; Od nauki programowania są książki i kursy, a z forum się korzysta jeśli ma się problem z czymś innym, niż z brakiem wiedzy z zakresu podstaw programowania.

1

No właśnie, jakby pytający samodzielnie pokombinował - jak to zawsze powtarzam - do bólu, a w ostateczności pisał na forum z pytaniami. To już dawno miałby gotowy program. Ode mnie na zachęte pisany szybko kod dla FPC. Przetłumacz sobie to na C. Ponieważ dopiero teraz dojrzałem, o jaki język chodzi. Że też zawsze poza językiem / IDE muszą tutaj do tagów trafiać jakieś bezmyślne słowa jak 'kwadrat' :/

program always_use_your_brain_before_ask_on_forum;

uses
  Windows;

const
  Upper_Left_Char = #$DA;
  Lower_Left_Char = #$C0;
  Upper_Right_Char = #$BF;
  Lower_Right_char = #$D9;
  Empty_Space_Char = #$20;
  Vertical_Line_Char = #$B3;
  Horizontal_Line_Char = #$C4;

var
  S : string;
  I, J, IntColumns, IntRows : integer;
begin
  repeat
    Write('Enter rows count (minimum 2 / maximum 25): ');
    Readln(S);
    Val(S, IntRows, I);
  until (I = 0) and (IntRows >= 2) and (IntRows <= 25);
  repeat
    Write('Enter columns count (minimum 2 / maximum 80): ');
    Readln(S);
    Val(S, IntColumns, I);
  until (I = 0) and (IntColumns >= 2) and (IntRows <= 80);
  Writeln;
  Write(Upper_Left_Char);
  for I := 1 to IntColumns - 2 do
  begin
    Write(Horizontal_Line_Char);
  end;
  Write(Upper_Right_Char);
  Writeln;
  for J := 1 to IntRows - 2 do
    for I := 1 to IntColumns do
    begin
      if I = 1 then
      begin
        Write(Vertical_Line_Char);
      end;
      if (I > 1) and (I < IntColumns) then
      begin
        Write(Empty_Space_Char);
      end;
      if I = IntColumns then
      begin
        Write(Vertical_Line_Char);
        Writeln;
      end;
    end;
  Write(Lower_Left_Char);
  for I := 1 to IntColumns - 2 do
  begin
    Write(Horizontal_Line_Char);
  end;
  Write(Lower_Right_Char);
  Writeln;
  Readln;
end.

Pewnie da się to zrobić inaczej i prościej. Ale na szybko tak wymodziłem.

0

Napisałem na razie program który pobiera długosc, szerokość i znak z jakiego ma być zbudowana ramka. Docelowo program ma wyglądac tak żeby program pobierał jeszcze współrzędne ramki i była ona stworzona ze znaków ascii, tego własnie nie potrafie zrobić.

kod

#include <iostream>
#include <conio.h>

using namespace std;
void Rysuj(int _wysokosc, int _dlugosc, char _znak){

	for ( int a = 0; a <= _wysokosc-1; a++){
		for ( int b = 0; b <= _dlugosc-1; b++){
			if (a == 0 || a == _wysokosc-1){
				cout << _znak;
			}else if(b == 0 || b == _dlugosc-1){
				cout << _znak;
			}else{
				cout << " ";
			}
		}
		cout << endl;
	}
}


int main(){
int dlugosc,wysokosc;
char znak;
cout << "Dlugosc:\t";
cin >> dlugosc;
cout << "Wysokosc:\t";
cin >> wysokosc;
cout << "Znak:\t";
cin >> znak;

Rysuj(wysokosc,dlugosc,znak);

getch();
return 0;
}

dodanie znacznika <code class="c"> - @furious programming

0
void Draw(int Y, int X,char ch)
  {
   for(int y=0;y<Y;++y,cout<<endl) for(int x=0;x<X;++x) cout<<((x)&&(X-x-1)&&(y)&&(Y-y-1)?' ':ch);
  }
0

Ta funkcja robi dokładnie to samo co moja która wcześniej napisałem. Chodzi mi o współrzędne ramki wzgledem pozycji, gdzie ma się znalezc ! Jak na osi, x pkt od prawej i y od góry

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