Hackerboard WikiHaboBlog

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Buchstabenpyramide

Diskussion: Buchstabenpyramide im Forum Programmieraufgaben, in der Kategorie Code Kitchen; So ich habs mal in C geschrieben: Code: #include <stdlib.h> #include <stdio.h> int main() { int i, j; char inp=0; ...

Antwort
Alt 07.05.09, 11:34   #16 (permalink)
 
Registriert seit: 07.05.09
mYstar Leistung: Facit NTK
Likes: 0
Standard


So ich habs mal in C geschrieben:

Code:
#include <stdlib.h>
#include <stdio.h>
int main()
{
  int i, j;
  char inp=0;
  while(inp<1 || inp>26)
  {
    printf("Bitte einen Grossbuchstaben eingeben: ");
    inp = getchar();
    inp -=64;
    while(getchar()!='\n');
  }

  for(i=1; i<=inp; i++)
  {
    for(j=i; j<inp; j++) putchar(' ');
    for(j=1; j<=i; j++) putchar(64+j);
    for(j-=2; j>0; j--) putchar(64+j);
    putchar('\n');
  }
  return 0;
}
Grüsse mYstar
mYstar ist offline   Mit Zitat antworten
Alt 23.05.09, 12:27   #17 (permalink)
 
Registriert seit: 02.10.08
Alive Leistung: Facit NTK
Likes: 0
Standard

Hier hab ich auch mal eine Möglichkeit in C++:

Code:
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {

if(argc < 2) {
	cout << "Usage: a.out <Buchstabe>" << endl;
	return -1;
}
char *fin = argv[1];
int max = (int)*fin - 65;

char alph[] = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U','V', 'W', 'X', 'Y', 'Z'};
int k=0,i=0,j=0,p=0,q=max;

while(k <= max) {
	for(p=q; p>=0; p--) cout << ' ';
	for(i=0; i<=k; i++) cout << alph[i];
	for(j=(k-1); j>=0; j--) cout << alph[j];
	cout << endl;
	k++;
	q--;
}
return  0;
}
./a.out G
Code:
       A
      ABA
     ABCBA
    ABCDCBA
   ABCDEDCBA
  ABCDEFEDCBA
 ABCDEFGFEDCBA
Alive ist offline   Mit Zitat antworten
Alt 16.09.09, 15:20   #18 (permalink)
 
Registriert seit: 25.11.06
Cemper Leistung: Facit NTK
Cemper eine Nachricht über ICQ schicken
Likes: 0
Standard

Python, eine Zeile:
Code:
for c in range(ord("A"), ord(raw_input("Geben Sie einen Grossbuchstaben ein: ").capitalize()) + 1): print ''.join([" " for d in range(ord("A"), 168 - c)])+''.join([chr(d) for d in range(ord("A"), c)])+''.join([chr(d) for d in range(c, ord("A") - 1, -1)])
Ich hab Spaß an den Aufgaben hier

Die Pyramide ist natürlich zentriert.

So, Update: Pyramidenprogramm fällt nicht mehr um, wenn man einen Kleinbuchstaben eingibt.
Das ist nur ein Vorwand, einen blöden Kommentar zu dem Post unter meinem abzugeben, so etwas wie:
DAS nennst du kurz!? Und dann gibt es nichtmal Benutzereingabe, tsts...

mfg,
Cemper
Cemper ist offline   Mit Zitat antworten
Alt 18.09.09, 17:53   #19 (permalink)
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard

Java, kurz und prägnant

Code:
public class Main {
	public static void main(String[] args) {
		final char start = 'A', mid = 'C';

		for (int row = start; row <= mid; ++row) {
			for (int format = 0; format < (mid - row); ++format) System.out.print(" ");
			for (char left = start; left <= row; ++left) System.out.print(left);
			for (char right = (char) (row - 1); right >= start; --right) System.out.print(right);
			System.out.println();
		}
	}
}
MrSpider ist offline   Mit Zitat antworten
Alt 25.09.09, 13:54   #20 (permalink)
 
Registriert seit: 30.07.09
lorschy Leistung: Facit NTK
lorschy eine Nachricht über ICQ schicken
Likes: 0
Standard

hab auchma schnell eine sicherlich nicht ganz so elegante aber funktionierende loesung in perl geschrieben....
Code:
use strict;

my $c = getc(STDIN);
my $spn=ord(uc($c)) -65;

for (0..$spn){
my @a;
for (0 .. $_) {
push(@a, chr(65+$_));
$_++;
}
print " "x$spn--;
print @a;
pop @a;
print reverse @a;
print "\n";
}
lorschy ist offline   Mit Zitat antworten
Alt 08.11.09, 19:45   #21 (permalink)
 
Registriert seit: 11.06.05
snoggo Leistung: Facit NTK
Likes: 0
Standard

Lerne gerade C++, da sind solche Aufgaben echt gut.
Code:
#include <iostream>
using namespace std;

int main(int argc, char **argv)
{
    // exit if no letter is given
    if (argc != 2)
    {
        cout << "You have to enter a letter!" << endl;
        return 1;
    }
    
    // get first char and convert it to uppercase
    int end = (int)argv[1][0];
    if (end > 90)
        end -= 32;

    // check if it is a valid character
    if ((end < 65) || (end > 90))
    {
        cout << "Character not in range!" << endl;
        return 2;
    }

    // loop it!
    for (int i = 65; i <= end; i++)
    {
        for (int s = i - end; s < 0; s++) cout << " ";
        for (int c = 65; c <= i; c++) cout << (char)c;
        for (int b = i - 1; b >= 65; b--) cout << (char)b;
        cout << "\n";
    }
    return 0;
}
Code:
<< dh@asuka:~/stuff/habo/buchstabenpyramide >> $ ./a.out x
                       A
                      ABA
                     ABCBA
                    ABCDCBA
                   ABCDEDCBA
                  ABCDEFEDCBA
                 ABCDEFGFEDCBA
                ABCDEFGHGFEDCBA
               ABCDEFGHIHGFEDCBA
              ABCDEFGHIJIHGFEDCBA
             ABCDEFGHIJKJIHGFEDCBA
            ABCDEFGHIJKLKJIHGFEDCBA
           ABCDEFGHIJKLMLKJIHGFEDCBA
          ABCDEFGHIJKLMNMLKJIHGFEDCBA
         ABCDEFGHIJKLMNONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
 ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
snoggo ist offline   Mit Zitat antworten
Alt 13.12.09, 22:04   #22 (permalink)
 
Benutzerbild von Chris_XY
 
Registriert seit: 01.07.05
Chris_XY Leistung: Z3
Likes: 3
Standard

Waaaah, ich hab's verhunzt. Hoffentlich sieht das keiner meiner Profs!

Aber es geht und das ist ja die Hauptsache!

Ada:
Code:
with Ada.Text_IO;

procedure Buchstabenpyramide is
   use Ada.Text_IO;
   Zielbuchstabe : Character;

   procedure Pyramide (Zeile : Integer) is
   begin
      for Zaehler in reverse
        0 .. Character'Pos (Zielbuchstabe) - Character'Pos ('A') - Zeile
      loop
         Put (" ");
      end loop;
      for Zaehler in 0 .. Zeile loop
         Put (Character'Val (Character'Pos ('A') + Zaehler));
      end loop;
      for Zaehler in reverse 0 .. Zeile - 1 loop
         Put (Character'Val (Character'Pos ('A') + Zaehler));
      end loop;
      New_Line;
   end Pyramide;

begin
   Put ("Zielbuchstabe eingeben (Grossbuchstabe): ");
   Get (Zielbuchstabe);
   for Zaehler in 0 .. Character'Pos (Zielbuchstabe) - Character'Pos ('A') loop
      Pyramide (Zaehler);
   end loop;
end Buchstabenpyramide;
__________________
The only true thing about religion is
that it's false.
Chris_XY ist offline   Mit Zitat antworten
Alt 01.04.10, 14:48   #23 (permalink)
 
Registriert seit: 01.04.10
Flatty Leistung: Facit NTK
Likes: 0
Standard Nochmal C#

Hi

Ich liebe solche Programmieraufgaben. Da kann man sich so austoben, wie wir es in der professionellen Softwareentwicklung nicht tun dürfen Deshalb habe ich mich auch mal mit dieser Aufgabe verdingt. Als die erste Version fertig war, habe ich mir zum zusätzlichen Ziel gemacht, das Ganze mit nur einer einzigen Write(...) Anweisung zu bauen

Mein Spagetti-Code sieht wie folgt aus:

Code:
using C = System.Console; using K=System.Convert;
class Program {
    static void Main(string[] argv) {
        for (int m = argv[0][0] - 'A', i = 0; i <= m; i++)
            for (int j = -i, a = -j; j <= i; j++, a = j < 0 ? -j : j)
                C.Write("{0," + (j == -i ? m - i : 0) + "}{1}","", K.ToChar('A' + i - a) + (j == i ? "\n" : ""));
    }
}
Ausgabe für Z ist wie folgt:

Code:
                         A
                        ABA
                       ABCBA
                      ABCDCBA
                     ABCDEDCBA
                    ABCDEFEDCBA
                   ABCDEFGFEDCBA
                  ABCDEFGHGFEDCBA
                 ABCDEFGHIHGFEDCBA
                ABCDEFGHIJIHGFEDCBA
               ABCDEFGHIJKJIHGFEDCBA
              ABCDEFGHIJKLKJIHGFEDCBA
             ABCDEFGHIJKLMLKJIHGFEDCBA
            ABCDEFGHIJKLMNMLKJIHGFEDCBA
           ABCDEFGHIJKLMNONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
 ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
lg, Flatty
Flatty ist offline   Mit Zitat antworten
Alt 03.04.10, 17:20   #24 (permalink)
 
Registriert seit: 09.12.09
Thunder11 Leistung: Z3
Likes: 0
Standard

Ich habe es jetzt in BlitzMax programmiert:

Code:
Local ende:Byte=Asc(Upper(Input()))
Local k%
For Local i%=0 To (ende-65)
    For k=0 To (ende-65-i);Write " ";Next
    For k=0 To i%;Write Chr(k+65);Next
    For k=i-1 To 0 Step -1;Write Chr(k+65);Next
    Print
Next
End
Code:
Building pyramide
Compiling:pyramide.bmx
flat assembler  version 1.68  (1255799 kilobytes memory)
4 passes, 2690 bytes.
Linking:pyramide.exe
Executing:pyramide.exe
>z
                          A
                         ABA
                        ABCBA
                       ABCDCBA
                      ABCDEDCBA
                     ABCDEFEDCBA
                    ABCDEFGFEDCBA
                   ABCDEFGHGFEDCBA
                  ABCDEFGHIHGFEDCBA
                 ABCDEFGHIJIHGFEDCBA
                ABCDEFGHIJKJIHGFEDCBA
               ABCDEFGHIJKLKJIHGFEDCBA
              ABCDEFGHIJKLMLKJIHGFEDCBA
             ABCDEFGHIJKLMNMLKJIHGFEDCBA
            ABCDEFGHIJKLMNONMLKJIHGFEDCBA
           ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
 ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA

Process complete
__________________
B4 09 BA 08 01 CD 21 C3 48 61 6C 6C 6F 20 57 65 6C 74 21 24
Thunder11 ist offline   Mit Zitat antworten
Alt 09.07.10, 21:08   #25 (permalink)
 
Benutzerbild von chumbalum
 
Registriert seit: 09.07.10
chumbalum Leistung: Facit NTK
chumbalum eine Nachricht über ICQ schicken
Likes: 0
Standard

zur Abwechslung mal Ruby
Code:
def pyramide(buchstabe)
  counter = ("A"..buchstabe).inject(0){|sum, x| sum+1}
  
  ("A"..buchstabe).each{|char|
    result = ("A"..char).inject(string=""){|string, string_char|
      string.concat(string_char)    }
      counter.times do print " " end
      print result
      print result[0,result.size-1].reverse
      puts     
      counter -=1 
  }
end

pyramide("H")
chumbalum ist offline   Mit Zitat antworten
Alt 19.07.10, 20:15   #26 (permalink)
 
Registriert seit: 30.12.08
cByte Leistung: Facit NTK
Likes: 0
Standard

Mal wieder eine Java Lösung, aber ich habs mir zum Ziel gemacht keine Schleifen zu benutzen

Hier also eine rekursive Lösung (Update 0:24Uhr: Code verkürzt und optimiert):

Code:
public  class Buchstabenpyramide {
	public  static void main(String[] args) {
		if(args.length != 1) {
			System.out.println("Please choose a letter!");
			System.exit(0);
		}
		char dest = args[0].charAt(0);
		char[] letters = {'A','B','C','D','E','F','G','H','I','J','K','L',
							'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','['};
		int pointer = 0;
		int i = 0;
		recurse(dest,letters, i);
	}
	
	private static void recurse(char dest, char[] letters, int i) {
		if(letters[i] == dest+1) return;
		int pointer = 0;
		spaces(dest,i,0);
		single(pointer,letters[i],letters,i);
		System.out.println();
		recurse(dest,letters, i+1);
	}
	
	private static void spaces(char dest, int i, int j) {
		if(j == dest-65-i) return;
		System.out.print(" ");
		j++;
		spaces(dest,i,j);
	}
	
	private static void single(int pointer, char dest, char[] letters, int i) {
		if(pointer >= letters.length || pointer < 0) return;
		if(letters[pointer] == dest) {
			System.out.print(letters[pointer]);
			return;
		}
		System.out.print(letters[pointer]);
		single(pointer+1,dest,letters,i);
		System.out.print(letters[pointer]);
		return;
	}
}
Ausgabe:
Code:
xxx@xxx:Buchstabenpyramide$ java Buchstabenpyramide J
         A
        ABA
       ABCBA
      ABCDCBA
     ABCDEDCBA
    ABCDEFEDCBA
   ABCDEFGFEDCBA
  ABCDEFGHGFEDCBA
 ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
Viele Grüße!

Geändert von cByte (20.07.10 um 00:24 Uhr)
cByte ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Buchstabenpyramide
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61