| 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. |
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; ...
![]() |
| | #16 (permalink) |
| Registriert seit: 07.05.09 ![]() Likes: 0 | 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;
} |
| | |
| | #17 (permalink) |
| Registriert seit: 02.10.08 ![]() Likes: 0 | 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;
} Code: A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA |
| | |
| | #18 (permalink) |
| 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)]) ![]() 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 | |
| | |
| | #19 (permalink) |
| Registriert seit: 31.03.08 ![]() Likes: 0 | 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();
}
}
} |
| | |
| | #20 (permalink) |
| 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";
} | |
| | |
| | #21 (permalink) |
| Registriert seit: 11.06.05 ![]() Likes: 0 | 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 |
| | |
| | #22 (permalink) |
| Registriert seit: 01.07.05 ![]() Likes: 3 | 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. |
| | |
| | #23 (permalink) |
| Registriert seit: 01.04.10 ![]() Likes: 0 | 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" : ""));
}
} 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 |
| | |
| | #24 (permalink) |
| Registriert seit: 09.12.09 ![]() Likes: 0 | 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 |
| | |
| | #25 (permalink) |
| 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") | |
| | |
| | #26 (permalink) |
| Registriert seit: 30.12.08 ![]() Likes: 0 | 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;
}
} Code: xxx@xxx:Buchstabenpyramide$ java Buchstabenpyramide J
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA Geändert von cByte (20.07.10 um 00:24 Uhr) |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |