Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++]Trójkąt Pascala I Liczby rzymskie.


LordOfHearts

Rekomendowane odpowiedzi

Opublikowano

witam dziś mam zamiar przedstawić wam 2 oto skrypty

- Obliczanie Trójkąta pascala (jest w szkołach informatycznych jako zadanie, wiem przynajmniej że było) myślę że komuś się przyda

- Obliczanie liczby Arabskie na liczby rzymskie

 

Arabskie na liczby rzymskie

 

 

/*
Obliczanie Liczby Rzymskiej
*Skrypt Wykonany Przez LordOfHeartis*
*/

#include <iostream>
using namespace std;

int n[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
char *r[] = {"M", "CM", "D", "CD", "C", " C", "L", " L", " ", "I ", "V", "IV", "I",};


int main()
{
int i, t;
cout << "Liczba całkowita Arabska (dodatnia):";
cin >> i;
cout << "Zamiana na liczbe rzymska wynosi" << i <<": " ;
for (t=0; i>0; )
if (i>=n[t])
{
cout << r[t];
i -= n[t];
}
else
t++;
cout << endl;


}

 

 

 

Obliczanie Trójkąta Pascala

 

 

/*
Obliczanie Trójkąta Pascala
*Skrypt Wykonany Przez LordOfHeartis*
*/

#include <iomanip>
#include <iostream>
using namespace std;

int x(int t, int e)
{
if (e>0 && e<t)
return x(t-1, e-1) + x(t-1, e);
else
return 1;
}

int main()
{
int b, i;
cout << "Trojkat Pascala:\n\n";
for (b=0; b<=12; b++)
{
cout << setw(2) << b << setw(36-3* << "";
for (i=0; i<=b; i++)
cout << setw(6) << x(b, i);
cout << endl;
}
}

 

 

 

cout << setw(2) << b << setw(36-3* b << ""; < zlikwiduj spacje pomiędzy * / b

tu ma być małe b nie wiem dlaczego code zmienia na duże, ale to nie moja wina :(

..x..

Opublikowano

Czemu?

char *r[] = {"M", "CM", "D", "CD", "C", " C", "L", " L", " ", "I ", "V", "IV", "I",};

Dlaczego to jest wskaźnik, dlaczego nie ma "X" i dlaczego nie podałeś liczby elementów?

 

Pozatym ten program od liczb arabskich i rzymskich nie działa jak powinien. Źle podaje wynik.

Smutek to skutek chęci w kontekście skutku

raczej niefrasobliwej wzglądu o treści zgryźliwej

ma postać walca co jeździ nam po palcach.

Opublikowano

Czemu?

char *r[] = {"M", "CM", "D", "CD", "C", " C", "L", " L", " ", "I ", "V", "IV", "I",};

bo to są kolejne wartości od największej do najmniejszej w systemie rzymskim.

 

 

Dlaczego to jest wskaźnik, dlaczego nie ma "X" i dlaczego nie podałeś liczby elementów?

wskaźnik - wyjaśnię niżej

dlaczego nie ma X? - bo coś się zjebało i nie pokazało

nie podał liczby elementów bo nie jest to konieczne

 

Pozatym ten od liczb arabskich i rzymskich nie działa jak powinien. Źle podaje wynik.

wręcz przeciwnie

 

@topic. Dobrze przemyślane porządne kody. +

 

@wyjasnienie

"X" to string na którego pierwszy dowolny element można wskazać za pomocą char*, ale nie można rzutować go do char (tzn. stringa dłuższego niż 1 znak).

tak nie zadziała

char r[] = {'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'};

Opublikowano

No ok, ale program i tak źle działa. 49 tłumaczy na "LI", a powinno być "XLIX". Przed "L" nie może być "I", tylko "X".

Smutek to skutek chęci w kontekście skutku

raczej niefrasobliwej wzglądu o treści zgryźliwej

ma postać walca co jeździ nam po palcach.

Opublikowano

i jest, tylko mówię Ci, że forum chyba wyjebało wszystkie Xsy. Użyj tej tablicy znaków.

char *r[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I",};

 

@2up. Małe, ale dobrze przemyślane.

btw. i tak nie mogę rozkminić tej rekurencji do obliczania trójkąta pascala ;d (wiem, że jest wikipedii)

Opublikowano

btw. i tak nie mogę rozkminić tej rekurencji do obliczania trójkąta pascala ;d (wiem, że jest wikipedii)

 

Współczynniki są dodawane do pól o szerokości 6 znaków, Przed pierwszym współczynnikiem wiersza wprowadzania jest dwuznakowa wartość e i ciągu spacji o długości 36e -3

dlatego kolejny wiersz jest przesunięty w stosunku do wiersza wcześniejszego o 3 znaki w lewo

ograniczenie wartości e do 12 wynika z długości wiersza ekranu w trybie tekstowym równej ~80 znkaczków ;d

 

lepiej wytłumaczyć nie umiem, jeżeli źle to przepraszam.

..x..

Opublikowano

@up. chodzi mi o to. Co się dzieje w tej rekuremncji, że na końcu dostajemy wartość danego elementu w trójkącie pascala.

int x(int t, int e)
{
if (e>0 && e<t)
return x(t-1, e-1) + x(t-1, e);
else
return 1;
}

rekurencja jest ogólnie dość trudna do pojęcia dla człowieka (tzn. nie sama rekurencja, a działanie alhgorytmów rekurencyjnych), jeśli nie masz ochoty tłumaczyć to się nie wysilaj, bo i tak sobie to chyba rozrysuję dla paru przykładów i może coś zaświta. Jak rozrysuję w miare zrozumiale to wrzucę, może komuś się przyda.

Opublikowano

Wiem że trudno, bo jak by to napisał ktoś inny to pewnie więcej problemów bym miał niż ty =)

 

Ps. Funkcja X wyznacza wartość współczynniki Newtona <- może się przyda.

 

ale w sumie nie ma nic trudnego.

..x..

Opublikowano

ok. pomajstrowałem. Sam znalazłem zależność w takim trójkącie i sam wyprowadziłem wzór (no muszę się pochwalić ;d), pewnie (napewno) jest to już znane (możliwe, że nawet jest to ten wzór, którego ty uzyłeś tylkow wersji iteracynej, dla mnie wazne jest to, że sam go wyprowadziłem z własnyc obserwacji), ale lubię czasem poszukać jakiechś zalezności w ciągach i wyprowadzić działający wzór.

 

rzad // numer rzedu od gory (numeracja od 0) >= 0

x // numer liczby szukanej w danym rzedzie od lewej. pierwsza liczba w rzędzie zawsze jest równa 1, następna wartości 'rzad'. x >= 1

liczba[x] // odwołujemy się do liczby o indeksie x w danym rzedzie. (Potrzebana jest jedna zmienna pomocnicza)

wzor.png

Opublikowano

ok. pomajstrowałem. Sam znalazłem zależność w takim trójkącie i sam wyprowadziłem wzór (no muszę się pochwalić ;d), pewnie (napewno) jest to już znane (możliwe, że nawet jest to ten wzór, którego ty uzyłeś tylkow wersji iteracynej, dla mnie wazne jest to, że sam go wyprowadziłem z własnyc obserwacji), ale lubię czasem poszukać jakiechś zalezności w ciągach i wyprowadzić działający wzór.

 

rzad // numer rzedu od gory (numeracja od 0) >= 0

x // numer liczby szukanej w danym rzedzie od lewej. pierwsza liczba w rzędzie zawsze jest równa 1, następna wartości 'rzad'. x >= 1

liczba[x] // odwołujemy się do liczby o indeksie x w danym rzedzie. (Potrzebana jest jedna zmienna pomocnicza)

wzor.png

 

ja bym to zrobił tak, chyba dobrze. :P

75afdcbcb1fb.png

 

@

ps tylko mi się nie te liczby wpisało

n to t k to e

..x..

Opublikowano

opisz trochę ten twój wzór bo nie kumam co jest co ;d

ok, symbol newtona.

powinno być

t!

----------

k!(t-k)!

 

nie wiem skąd ci się tam e wzięło

 

Trzebaby było sprawdzić który wypadnie lepiej w testach szybkości, sam jestem ciekaw. Tak na oko ciężko ocenić.

 

 

btw. odośnie mojego

można po prostu (na oko, może być takś off by 1)

int x = 1, rzad = 11, liczba = 1, szukane = 5;//no tam, numer szukanej liczby
while((++x)<=szukane)
liczba *= ten ułamek ze środkowej części;

Opublikowano

ogólnie ja z matematyki nigdy prymusem nie byłem, ale to raczej z lenistwa, bo tego było troszku

 

tu masz wyjaśnione

http://pl.wikipedia..../Symbol_Newtona

nie chce mi się pisać, opisywać ale łapaj

 

ps. ja w C++ to świeży jestem =)

 

@edit

 

szczerze nie chce tego rozgrzebywać, napisałem te skrypty bo czytałem na jakimś forum, że mają problemy z tym, ale to nie ważne teraz chcę się zająć RE. Jeżeli Znajdę na to czas :P

..x..

Opublikowano

dużo razy edytowałem posta jak jeszcze swojego pisałeś ;d

pomyślałem, że to co wrzuciłeś to wzór na symbol newtona tuż po wysłaniu posta. Zaczynam już kumać wszystko jak to działa i dlaczego.

 

szczerze nie chce tego rozgrzebywać

zawsze mozna poczekać, aż ktoś jeszcze dopowie coś ciekawego

 

jutro może machnę jakieś jakieś testy szybkości. Mam nadzieje, że mój "wynalazek" choć trochę okaże się dobry

Opublikowano

dużo razy edytowałem posta jak jeszcze swojego pisałeś ;d

pomyślałem, że to co wrzuciłeś to wzór na symbol newtona tuż po wysłaniu posta. Zaczynam już kumać wszystko jak to działa i dlaczego.

 

 

zawsze mozna poczekać, aż ktoś jeszcze dopowie coś ciekawego

 

jutro może machnę jakieś jakieś testy szybkości. Mam nadzieje, że mój "wynalazek" choć trochę okaże się dobry

 

na pewno będzie dobry, tak naprawdę przygodę z C++ zacząłem nie dawno, wcześniej to opierdzielałem się w vb. Lua (do mt2), nawet nie złe questy waliłem ale to nie ważne i tak ogólnie po za grę nie wychodziłem, teraz w to nie bawię się więc opuściłem chyba na zawszę <3(lua)

..x..

Opublikowano

No ok, ale program i tak źle działa. 49 tłumaczy na "LI", a powinno być "XLIX". Przed "L" nie może być "I", tylko "X".

powiedz mi jaki w tym sens, odejmując od 50 10, a potem dodając 9, nie lepiej odjąć od 50 1?

czyli powinno być IL, a I może być przed każdą liczbą, większą od niej, nawet od 1000, zapisałbyś liczbę 2999 tak, MMCMXCIX czy MMIM

i tak mam zacząć zabawe w c, to może podołam się temu wyzwaniu ;d

@down

ale nie tym tradycyjnym sposobem ;f

Opublikowano

@up. W tradycyjnym zapisie rzymskim powinno być MMCMXCIX.

 

i tak mam zacząć zabawe w c, to może podołam się temu wyzwaniu ;d

robisz tak samo tylko podstawiasz więcej liczb i ich odpowiedników w systemie rzymskim do tabel. Nic trudnego

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...