Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: C - program

14.11.2011 10:46
😊
1
pajkul
93
Senator

C - program

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.

14.11.2011 11:05
HETRIX22
2
odpowiedz
HETRIX22
199
PLEBS

Nie brakuje jednej klamry? Czy coÅ› niedowidze :P

14.11.2011 11:06
Scatterhead
3
odpowiedz
Scatterhead
118
volvo plz

da siÄ™ to zapisać za pomocÄ… jednej pÄ™tli i wzoru matematycznego, ale na szybko nie wymyÅ›lÄ™

14.11.2011 13:07
Scatterhead
4
odpowiedz
Scatterhead
118
volvo plz

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ć

15.11.2011 00:04
😊
5
odpowiedz
pajkul
93
Senator

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.

15.11.2011 09:54
6
odpowiedz
pajkul
93
Senator

up

15.11.2011 12:55
Scatterhead
7
odpowiedz
Scatterhead
118
volvo plz
15.11.2011 20:07
8
odpowiedz
pajkul
93
Senator

Nie ukrywam, ze dalej nie wiem jak to zrobic.

15.11.2011 20:17
9
odpowiedz
zanonimizowany550804
35
Generał

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...

15.11.2011 20:36
PrzemoDZ
10
odpowiedz
PrzemoDZ
133
Legend

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.

15.11.2011 21:07
pecet007
11
odpowiedz
pecet007
178
~

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$

Forum: C - program