• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Programm in C

Mitglied seit
10.09.2003
Beiträge
1.645
Reaktionen
0
folgens Programm soll in C erstellt werden:

Es soll eine Pyramide erzeugt werden die wie folgt aussieht

*
***
*****
*******
*********
***********
*************

Also eine Pyramide aus 49 Elementen und 7 Reihen

Die Aufgabe ist nun, das man ein beliege Anzahl Elemente zwischen 0 und 49 eingeben kann, und das Programm die Pyramide dann darstellt.
Problem ist, dass die Pyramide ja von unten aufgebaut werden muss.
Hat wer einen Ansatz für mich?

€ : Es soll eine Pyramide sein und kein Dreieck, der stellt das nur nicht so da wie ich will
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
was gibt das programm denn bei ner 4 als eingabe aus?
:confused:
 
Mitglied seit
12.07.2001
Beiträge
33.337
Reaktionen
196
Für eine Pyramide müsste man es dreidimensional darstellen.
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
einigen wir uns auf gleichschenkeliges dreieck -.-

also was bei eingabe "4"?
 
Mitglied seit
05.07.2002
Beiträge
3.716
Reaktionen
0
mmh, hab hier was ähnliches:

import java.util.Scanner;
public class Dreieck {


/**
* @param args
*/
public static void main(String[] args) {
Scanner In = new Scanner (System.in);
System.out.println("Welche Höhe soll das Dreieck haben?");
int h = In.nextInt();
int x = 0;
if (h <= 0)
System.out.println("Die Höhe muss größer als 0 sein");
else
{
System.out.println("Dreieck der Höhe: " + h);
while (x < h)
{
int y = h - x;
while (y > 1) {
System.out.print(" ");
y--;
}
int c = 2*x+1;
while (c > 0) {
System.out.print("*");
c--;
}
System.out.println();


x++;
}
}

// TODO Auto-generated method stub

}

}

man gibt die höhe an und dann wird nen entsprechendes dreieck (von mir aus auch ne pyramide) erzeugt.
is allerdings java nich c
 

RRA^StArFiRe

Guest
von unten aufbauen? du meinst jetz theoretisch oder sollste die aufm bildschirm von unten aufbauen x_X

wie soll das dreieck bei ner eingabe von z.b. 10 aussehen? x_X
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
und "5"?

ich mein es sollte doch irgendwie geklärt werden, womit es abschliesst, bzw irgendeine regel sollte es schon haben, sonst kanns schlecht eine lösung geben.
 
Mitglied seit
10.09.2003
Beiträge
1.645
Reaktionen
0
ALSO:

4 sieht so aus


****

15

ist dann

**
*************


mit von unten aufbauen meine ich, dass er eine 4 so ausgibt:

****

und nicht
*
***
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
aha! jetzt versteht man auch, was du mit "von unten aufbauen" meintest ;)
 

Clawg

Guest
Die Breite des Dreiecks in der n-ten Zeile ist n, die Zahl der * in einem Dreieck der Hoehe n ist SUM_1..n [n] = n * (1 + n) / 2 = y

Man muss nur nach n aufloesen und hat die Form des Dreiecks:
<=> n^2 / 2 + n/2 - y = 0
<=> n^2 + n - 2y = 0
<=>
n = -1/2 + sqrt(1/4 + 2y) (n positiv)

z.B. mit y = 3 ergibt sich n = -1/2 + sqrt(6.25) = 2
*
**

edit:
mmh... achne... das Problem ist ja einfacher... bzw. wo ist ueberhaupt das Problem? Du musst ja nur nacheinander die Zeilen fuellen...
 

4GT~DosX

Guest
da könnte man zB eine mehrfachverschachtelte Forschleife mit ein paar If Anweisungen draus machen.

Code:
Anzahl  Stufe
1         7
3         6
5         5
7         4
9         3
11        2
13        1
 
Mitglied seit
03.08.2002
Beiträge
3.193
Reaktionen
0
iterativ isses kinderfasching, rekursiv isses lustiger =)
 

4GT~DosX

Guest
Original geschrieben von Eeth
iterativ isses kinderfasching, rekursiv isses lustiger =)

Das stimmt wohl. Sieht mit Sicherheit schicker aus & ist kürzer zu formulieren. Dafür wird das iterative schneller im Ablauf sein.
 
Mitglied seit
03.08.2002
Beiträge
163
Reaktionen
0
hf

Code:
#include "stdio.h"
#include "stdlib.h"

#define HEIGHT 7
#define DIFF 2

#define BASE (DIFF*(HEIGHT-1) + 1)
#define AREA (DIFF * (HEIGHT*(HEIGHT-1)/2) + HEIGHT)

void print_row(int points) { printf("%d\n", points); }

int main(int argc, char *argv[])
{
	int pp = -1;		// partial points
	int ppr = BASE;		// points per row

	if (argc > 0)
		pp = atoi(argv[1]);

	if (pp < 0 || pp > AREA)
		return EXIT_FAILURE;

	if (pp > AREA || pp <= 0)
		return EXIT_FAILURE;

	// calculate partial points
	while (pp > ppr)
	{
		pp -= ppr;
		ppr -= DIFF;
	}

	// print partial points if there are any
	if (pp != ppr)
	{
		print_row(pp);
		ppr += DIFF;
	}

	// print remaining points;
	while (ppr <= BASE)
	{
		print_row(ppr);
		ppr += DIFF;
	}

	return EXIT_SUCCESS;
}
 

Player10

Guest
ich hab oben den code nicht gelesen, aber das muss nicht von unten aufgebaut werden:

erste reihe: 4* leer 1 stern
zweite reihe: 2* leer 3 stern
dritte reihe: 0*leer 5 stern

das leere wird immer weniger, die sterne immer mehr

also mit ner einfachen schleife und keine uf-abfragen
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Naja, es geht schon einfacher als sein der Code, der hier gepostet wurde.
 
Mitglied seit
03.08.2002
Beiträge
163
Reaktionen
0
lass mal hören, interessiert mich, wenns einfacher geht als das was ich geposted hab. (iterativ, mind. genauso schnell)

(ausserdem zielte mein comment darauf ab, dass er die aufgabe wohl missverstanden hat und seine einfachere version deshalb in etwa 98% der fälle falsche ergebnisse liefert :p)
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Habe hier grad nur einen Weihnachtsbaum, aber man kann den natürlich sehr leicht anpassen:

Code:
#include <stdio.h>
#define hoehe 5
#define z '*'

void sterne (char zeichen, int anzahl) {
    int i;
    for(i=1;i<=anzahl;i++) putchar (zeichen);
}
void main(void) {
    int zeile;
    for(zeile=1;zeile<=hoehe;zeile++) {
        sterne (' ',hoehe-zeile);
        sterne (z,2*zeile-1);
        printf("\n");
    }
    //Stamm
    for(zeile=1;zeile<=3;zeile++) {
        sterne (' ',hoehe-1);
        putchar(z);
        printf("\n");
    }
}

Das als Grundstock ist sehr leicht erweiterbar und deutlich unkomplizierter als deine Version. Ob schneller oder besser sei dahingestellt. Ich bin Informatiker und kein Mathematiker. Ich scheiss auf Bruchteile von Sekunden :)
 
Mitglied seit
03.08.2002
Beiträge
163
Reaktionen
0
versteh ich die aufgabe falsch?

Original geschrieben von lemon.hendr1k
Die Aufgabe ist nun, das man ein beliege Anzahl Elemente zwischen 0 und 49 eingeben kann, und das Programm die Pyramide dann darstellt.

input 49 output 1, 3, 5, 7, 9, 11, 13

input 35 output 2, 9, 11, 13

is aber nen schöner weihnachtsbaum :)
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Na wir wollen ihm doch nicht alles vorkauen ^^
 

The_Company

Guest
Code:
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char **argv)
{
  unsigned int i, sterne = 49;
  static const char stars[] = "                                                 "
                              "*************************************************";
  const char *pos;

  if (argc >= 2)
        sterne = strtoul (argv[1], NULL, 0);
  sterne = sterne > 49 ? 49 : sterne;
  pos = stars + sterne;
  for (i = 0; i < 7; i++) {
    printf ("%*s%.*s\n", 6 - i, "", 2 * i + 1, pos);
    pos += 2 * i + 1;
  };
  return 0;
}

Und der Code ist mit Einlesen der Anzahl der Sterne vonner Kommandozeile. :fu:
Ausserdem ist es pures Abuse von printf und Pointerarithmetik, aber darum gehts in C ja. ;)
 
Oben