Czy program rysujacy choinke o podanej wysokosci mozna napisac w jakis latwiejszy sposob niz ten ponizej, oczywiscie pozostajac na podobnym poziomie znajomosci jezyka?
#include <stdafx.h>
#include <stdio.h>
int main()
‹
int n, a, b, c;
char d=32;
printf("Podaj wysokosc:\n");
scanf("%d",&n);
for(b=1; b<=n; b++)
‹
for(a=0;a+b<n;a++)
‹
printf("%c", d);
›
printf("x");
for(c=1; c<b; c++)
‹
printf("xx");
›
for(a=0; a+b<n; a++)
‹
printf("%c", d);
›
printf("\n");
›
›
Ok, jest klamra.
da się to zapisać za pomocą jednej pętli i wzoru matematycznego, ale na szybko nie wymyślę
znalazlem chwilke:
#include<stdio.h>
#include<math.h>
int main (int argc, const char * argv[]) ‹
int h;
int i;
int w;
printf("Podaj wysokosc:\n");
scanf("%d",&h);
w = (2*h)-1;
for (i = 0;i < (w*h); i++)‹
if (abs((i - ((i / w)*w) - (w/2))) < ((i/w))) printf("*"); else printf(" ");
if (i % w == 0) printf("\n");
›
return 0;
›
kod jest też tutaj: http://pastebin.com/v9f22a05
wyjaśnienie:
w to szerokość, ze wzoru: 2 * wysokość - 1. (tyle wychodzi maksymalnie gwiazdek u podstawy jeżeli liczymy symetrycznie względem wysokości)
pętla jest wykonywana w*h, wysokosc razy szerokosc, czyli dokladnie tyle znaków, ile program ma wypluć na ekran.
z każdą petlą jest sprawdzane, czy dla aktualnej pozycji ma się znaleźć gwiazdka czy spacja (pierwszy IF) oraz czy jest to już koniec wiersza (drugi if)
w pierwszy IF'ie jest obliczane:
(i - ((i / w)*w) - pozycja na osi X (numer kolumny)
abs((i - ((i / w)*w) - (w/2))) - odległość pozycji X od środka wiersza
((i/w))) - pozycja na osi Y (numer wiersza)
(abs((i - ((i / w)*w) - (w/2))) < ((i/w))) printf("*"); else printf(" ") - jeżeli odegłość pozycji X od środka wiersza jest mniejsza niż numer danego wiersza to wprowadź gwiazdkę, jeżeli nie to daj spację.
i koniec wiersza jak dojdziemy do końca linni
w ten sposób dla pierwszego wiersza będzie tylko jedna gwiazka, dla drugiego 3 gwiazdki, dla trzeciego 5 gwiazdek, e.t.c.
trochę za dużo nawiasów, ale nie chciało mi się już usuwać
Dzieki wielkie :)
Zeby nie smiecic nowym watkiem, zapytam:
Jak napisac program, ktory z grupy powiedzmy 10 liczb wybiera cztery takie, ktorych suma daje 100 (zakladamy ze takie istnieja)? Do dyspozycji mamy petle for i tablice.
Nie wiem czego oczekujesz, moze tego zeby golowicze za ciebie prace domowa pisali? Jak czegos nie rozumiesz to napisz konkretnie czego to moze ktos wyjasni a nie czekasz na gotowe rozwiazania...
Na pałę - brute force.
Cztery pętle. Po kolei sprawdzana każda kombinacja+modyfikacja by program pomijał kombinacje już sprawdzone, ale z liczbami w innej kolejności.
no wiem, że czasem google nie działa, ale bez przesady
https://www.google.com/codesearch#r3V42yO_ri4/trunk/others/knapsack.c&ct=rc&cd=3&q=knapsack%20lang:^c$