Zaloguj się, aby obserwować  
UthersonL

Programowanie - pytania, problemy, przykłady programów

1812 postów w tym temacie

Dnia 04.12.2008 o 15:45, graczomaniak napisał:

Czyli pętla "for" z odpowiednimi danymi liczbowymi?


Na przykład. A jaki kształt i wielkość ma mieć ta dziura?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.12.2008 o 16:36, rob006 napisał:

> Czyli pętla "for" z odpowiednimi danymi liczbowymi?

Na przykład. A jaki kształt i wielkość ma mieć ta dziura?

Niewielka, chodzi mi raczej tak żeby miala ze 3-4 linijki. Skoro linijek jest 15 to mysle gdzies posrodku to zrobic.
Kształt dowolny.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Twoja choinka to trójkąt, więc żeby w niej wyciąć trójką wystarczy skopiować procedurę którą masz, wkleić ponownie i zmienić tylko kilka wartości - jeśli trójkąt ma mieć 4 linijki musisz w pętli for zmienić 15 na 4, i odpowiednio obniżyć miejsce w którym trójkąt ma się zacząć rysować, więc zamiast gotoxy(41-n, 3+n); np gotoxy(41-n, 10+n);. No i oczywiście wypisywać spację zamiast gwiazdek. ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam pytanko dotyczące C++.
Mianowicie - z tego, co wiem, to mogę przed int main() dać np. int krowa(), a w niej jakieś instrukcje. Ale...przynajmniej 80% z nich nie działa (w zasadzie działają tylko int i wszelkiej maści obliczenia). Da się to jakoś ominąć i używać wszystkich instrukcji? To raz. Po drugie - taka int krowa() wewnątrz siebie przechowuje zmienne itd., ale są to tylko zmienne lokalne, niedostępne w późniejszych miejscach programu. Jest sposób, aby te zmienne "wyciągać" i używać w innych miejscach? Pomijam takie rozwiązanie, bo wydaje mi się nieeleganckie:

int a=10;
int krowa(){
::a+=2-;
return 0;
}
int main(){
cout << ::a;
return 0;
}

I ostatnie pytanko - jest sposób, aby do tej int krowa() móc później wrócić np. po wykonaniu jakiejś instrukcji w int main()?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Twoja ''krowa'' to nic innego jak definicja funkcji, która zwraca wartość typu całkowitoliczbowego (w Twoim kodzie zawsze zero) i nie przyjmuje żadnych argumentów. Wywołujesz ją w głównym segmencie programu (main) pisząc po prostu krowa();
Możesz także przypisać wartość zwracaną przez tę funkcję do np. globalnej zmiennej (np. globalna_zmienna) poprzez konstrukcję globalna_zmienna = krowa();. Ale to wymaga innego zapisu w linii ze słowem return, np. return a;, bo obecnie otrzymasz zero.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Dzięki za wyjaśnienie. A jest jakiś sposób, aby podzielić kod na kilka podprogramów? Bo zaczyna mi się to robić potrzebne - kod dochodzący do 250 linijek trzymany tylko dzięki if i pętlom jest zdecydowanie nieczytelny :)
Chodzi mi o coś takiego, aby np. przy wielokrotnie powtarzanej instrukcji (w różnych miejscach programu) odwoływać się do wcześniejszego miejsca w kodzie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jeśli w kodzie występuje często ten sam ciąg instrukcji, to najlepiej opakować te instrukcje w funkcję i później się odwoływać do niej. Na przykład gdy działasz na tablicach i kilka razy w programie chcesz wypisywać wartości tych tablic użwając pętli, to zamiast za każdym razem pisać tę pętlę lepiej wrzucić ją w funkcję, powiedzmy, wypiszTab(), w której umieszczasz odpowiednie instrukcje. Wtedy za każdym razem, gdy chcesz wypisać wartości z tablicy używasz tej funkcji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ty mrazem takie zadanie. Teraz chodzi mi tylko o wytłumaczenie :).
Mam napisac program, który znajdzie liczbe naturalna należącą do przedziału 1 do 10000, której suma dzielników jest maxymalna.

Oto kod, który mam:

var i,k,s,j,m: longint;
begin
j:=1;
m:=1;
for i:= 2 to 10000 do
begin
s := 0;
for k:= 1 to i do
if i mod k = 0 then
s := s + k;
if s > j then
begin
j := s;
m := i;
end;
end;
writeln(''Max to '',m,'' z suma '',j);
readln;
end.

Teraz pytanie. Dlaczego przy każdej liczbie którą wpsize wyswietla mi się ta sama suma i ten sam Max? Czy to oznacza, że nie ma takiej liczby czy ja nie zrozumiałem programu?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.12.2008 o 18:54, graczomaniak napisał:

Teraz pytanie. Dlaczego przy każdej liczbie którą wpsize wyswietla mi się ta sama suma
i ten sam Max? Czy to oznacza, że nie ma takiej liczby czy ja nie zrozumiałem programu?

Przecież w tym programie nie ma nigdzie miejsca, w którym wprowadzasz jakąkolwiek liczbę i za każdym razem wykonuje się identyczny kod. Chyba, że zmieniasz wartość jednej ze zmiennych, ale jeśli tak, to nie wiem po co, bo polecenie jest jasne: masz przeszukać z góry podany przedział pod kątem liczby, która będzie spełniać wymieniony w poleceniu warunek.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy ktoś z tu obecnych potrafi pisać skrypty?

Mianowicie potrzebuje skryptu, który będzie wyświetlał użytkownika zalogowanego w systemie i hasło. Bardzo proszę o pomoc ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 08.12.2008 o 14:12, FlyMan92 napisał:

Mianowicie potrzebuje skryptu, który będzie wyświetlał użytkownika zalogowanego w systemie
i hasło. Bardzo proszę o pomoc ;)

1 w jakim języku ten skrypt?
2 ) hasło co najwyżej zaszyfrowane, no chyba że ma je łamać...... aktualnie stosuje się taką metodę że hasło jest szyfrowane szyfrem jednostronnym (czyli że odszyfrowanie jest albo niemożliwe albo też tak zasobożerne szybciej było by wszystkie możliwe hasła zaszyfrować), i potem po zaszyfrowaniu w ten sam sposób tego co użytkownik wpisze jako hasło są porównywane te zaszyfrowane (jeśli są takie same to znaczy że wpisał prawidłowe hasło i można zalogować.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.12.2008 o 00:14, ziptofaf napisał:

A jest jakiś sposób, aby podzielić kod na kilka podprogramów?

Funkcje i procedury (jak napisano powyżej). Umiejętność dzielenia programu na coraz mniejsze podprogramy, aż te najmniejsze z nich da się zakodować instrukcjami języka, jest kluczem programowania strukturalnego.

Kiedy program składa się już z tak wielu funkcji i procedur, że jego ogarnięcie nie jest możliwe, to program dzieli się na dane połączone z funkcjami i procedurami, co nazywa się programowaniem obiektowym.
Jaki będzie następny krok w ewolucji informatyki, tego jeszcze nikt nie wie, a nieliczni najlepsi ludzie w tej branży ledwo się domyślają.

Dnia 05.12.2008 o 00:14, ziptofaf napisał:

Bo zaczyna mi się to robić potrzebne - kod dochodzący do 250 linijek trzymany tylko dzięki
if i pętlom jest zdecydowanie nieczytelny :)

Gratulacje. Właśnie dostąpiłeś do pierwszego stopnia wtajemniczenia, które mówi, że programowanie w assemblerze pierwszych kalkulatorów i basicu jest zbyt mało efektywne (w tych językach nie było żadnego podziału na procedury i funkcje). Twój poziom w informatyce osiągnął już rok 1980. W celu rozwiązania Twojego problemu wymyślono pod koniec lat 70-tych poprzedniego wieku język Algol, a jego ulepszona wersja została nazwana Pascal. Na PC firma Borland stworzyła szybki kompilator Turbo Pascal pracujący na podrasowanym Pascalu. W studiach AT&T powstał w tamtym czasie eksperymentalny język B, a następnie na jego bazie język C.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W bash''u listę aktualnie zalogowanych użytkowników wraz z m.in. adresami, z których nastąpiło połączenie oraz godziną jego nawiązania otrzymasz dzięki poleceniu w. Mniej informacji dostarcza whoami, bo podaje nazwę konta, na którym jest efektywnie zalogowany wykonawca polecenia. Hasła, jak już wiesz nie uzyskasz.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

> Ale są to zagadnienia trochę zbyt abstrakcyjne dla człowieka, który pisze swój pierwszy program
Właśnie, że nie. Są one abstrakcyjne dla Ciebie bo ty musisz lub musiałeś je sobie przetłumaczyć lub całkowicie przestawić się (raczej to drugie). Dla osoby, która zaczyna od zera po załapaniu współczesnych paradygmatów (co trwa równie krótko jak załapanie każdego innego paradygmatu - sprawdzane doświadczalnie na wielu uczelniach) rozpoczęcie pisania w języku, który obejmuje tylko starsze paradygmaty jest banalne. Na przykład jeżeli ktoś potrafi napisać program ze strukturami i procedurami, to tym bardziej będzie potrafił napisać kod pojedynczej procedury czy instrukcji złożonej. Dlatego początkujący powinni zawsze gonić na skróty - zaczynając naukę od stanu współczesnej wiedzy, a nie próbując ją dogonić, co może trwać lata.

> Tylko właśnie obstaję przy pascalu dlatego, że oferuje dobre środowisko dla programisty piszącego swój pierwszy program.
Zgodziłbym się z Tobą całkowicie - tyle, że 20 lat temu. Wtedy środowisko np. Turbo Pascala było wprost idealne i nowoczesne. Tyle, że dzisiaj niestety nie jest to już prawda.
Dzisiaj środowisko Pascala (jakiekolwiek) oferuje mniej więcej tyle samo co środowisko dla pisania nawet w assemblerze. Ba, to już nawet Visual Basic oferuje większe możliwości dydaktyczne ponieważ jako język został on znacznie zmodyfikowany i uzupełniony o wszystkie cechy jakie posiada Turbo Pascal. A jako środowisko programistyczne, nawet go przewyższa.

A jakbyś miał jeszcze wątpliwości - proceduralna postać programu (brak innych obiektów poza głównym obiektem aplikacji), to tylko przypadek szczególny postaci obiektowej. Dokładnie tak samo jak postać liniowa (brak podprogramów) to przypadek szczególny postaci proceduralnej, a programowanie symboliczne to . A kto dzisiaj uczy się programowania proceduralnego? I kto uczył się programowania liniowego 20 lat temu? W obu wypadkach niemal nikt poza niedoinformowanymi. To już nie wróci, ewolucja zrobiła swoje.
Dzisiaj nawet czyste programowanie obiektowe jest już przestarzałe. Jesteśmy na progu powstania nowego paradygmatu programowania, który zastąpi paradygmat obiektowy i obejmie go jako przypadek szczególny. Prawdopodobnie ten nowy rodzaj programowania będzie miał wiele wspólnego z programowaniem współbieżności. Choćby dlatego, że już od wielu lat wymusza to ewolucja sprzętu komputerowego.
Nie widzę więc sensu w uczeniu się sposobu programowania, który będzie już trzecią generacją zapóźnienia.

I tak dla uściślenia kolejnych paradygmatów programowania, to występowały mniej więcej takie:
1. Programowanie kodu maszynowego (przełączniki, taśma perforowana)
2. Programowanie symboliczne (wszelkiego rodzaju assemblery oraz Basic)
2a. Programowanie liniowe (języki zawierające wydzielone instrukcje pętli, np. Forth)
2b. Programowanie proceduralne (języki zawierające instrukcje obsługi podprogramów, np. Algol, język B, Fortran)
3. Programowanie strukturalne (języki z hierarchicznymi strukturami danych, np. Pascal, C, Ada, Lisp, Logo, Perl)
3a. Programowanie współbieżne (np. Simula, Ada)
4. Programowanie obiektowe (starsze języki współczesne, np. Smalltalk, C++, Python)
4a. Programowanie zdarzeniowe (np. Visual Basic, Delphi, Visual C++, J++ itp.)
Większość tych paradygmatów obsługują języki takie jak Java, C# i nowe języki takie jak Ruby czy Groovy).
5. ???
Niektóre nowsze języki wspierają każdy z tych paradygmatów. Takimi przykładami są właśnie Ruby, Java i C#, a C++ realizuje je przy pomocy własnej rozszerzalności języka (szablony, operatory definiowalne, preprocesor).
Tak więc to od tych języków należy współcześnie zaczynać naukę.
Pascal jest już na odległym miejscu, już historycznym.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja się na skryptach nie znam, bo dopiero co zacząłem programować w Pascalu więc jestem pod tym względem amatorem. To zadanie z tym skryptem jest tak jakby dodatkowym na systemy ;) Nie wiem w jakim języku ma być to skrypt, ale tu mam skrypt, który pokazuje nazwę domeny i użytkownika zalogowanego w systemie. Jeśli dałoby się do niego dopisać to by pokazywał hasło to proszę o pomoc, a jeśli nie to zostanę przy tym co mam. Hasło zaszyfrowane.

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")

For Each objItem in colItems
Wscript.Echo objItem.UserName

Next

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przepraszam, że drugi post, ale nie mogłem edytować.

Dopiero teraz sobie uświadomiłem wasze posty i załapałem, że hasła nie zaszyfruje. Więc sprawa zamknięta. Jeszcze raz przepraszam za kłopot. ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 09.12.2008 o 14:24, Olamagato napisał:

5. ???


Być może jest to/będzie to programowanie usługowe, w którym obiekty będą współpracowały tylko i wyłącznie w celu świadczenia jakiejś określonej usługi, np. (obrazowo) obiekt-kierowca i obiekt-samochód będą oferowały razem usługę-przewóz osób, chociaż w innych kombinacjach mogą oferować nieskończenie wiele innych usług. Byłyby to zatem niezależne programy przystosowane do wzajemnego komunikowania się np. za pomocą protokołu HTTP ("języki": SOAP, WSDL). Co prawda nie potrafię w tej chwili nazwać dedykowanego programowaniu usługowemu (nazwa moja) języka programowania (C-Service? ;)), ale chyba dałoby się zachować zgodność z tokiem Twojego rozumowania i nazwać obiekt pewnym szczególnym przykładem usługi.

Nie jestem pewien czy prawidłowo odgadłem myśl, którą zawierasz w określeniu "paradygmat programowania", czyli że mówisz o programowaniu przez pryzmat pewnego określonego, coraz szerszego sposobu myślenia, dlatego proszę o komentarz w tej sprawie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A więc tak. Uczęszczam na warsztaty informatyczne do Wawy z C++. I mam problem. Nie chcę wyjść na osobę która idzie na łatwiznę i chce aby ktoś odwalał za niego brudną robotę ale mając jeszcze 5 sprawdzianów do piątku co daje 3 jednego i 4 drugie dnia (przy normie 1/dzień :() chciałbym was prosić o pomoc. Otóż "lektor" zadał nam 4 zadanka. Jedno mi się już udało zrobić. Zadanka są do zrobienia w DevC++. Z góry dziękuję i pozdrawiam!

Zadanka

3.2 -> http://students.mimuw.edu.pl/~bk277531/mtalenty/kolko3/zadanie3.2.pdf
3.3 -> http://students.mimuw.edu.pl/~bk277531/mtalenty/kolko3/zadanie3.3.pdf
bankiet -> http://www.main.edu.pl/user.phtml?op=showtask&task=ban&con=OIG1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować