Zaloguj się, aby obserwować  
UthersonL

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

1812 postów w tym temacie

Dnia 13.01.2014 o 17:43, Erton napisał:

W ogóle dziwny ten kod - default na początku switcha? No tego to jeszcze nie grali. Ciekawe,
czy to działa w ogóle.

Trochę stare.
Ale default na początku switcha jest jak najbardziej prawidłowy. Kolejność etykiet nie ma dla tej instrukcji znaczenia jeżeli każda kończy się przez break, continue lub return.
Natomiast największą siłą switcha jest efekt kiedy żadna z powyższych instrukcji nie występuje. Oto mały przykład switcha z Javy (identyczna jak w C/C++/C#), którego nie da się łatwo i tak zwięźle napisać w inny sposób. A przynajmniej nie bez sporego powielania kodu:
@Override public final void updateScreen()
{
do switch(imageBuffer.getImage().validate(gc))
{
default:
case VolatileImage.IMAGE_INCOMPATIBLE:
imageBuffer.pageFlip();
case VolatileImage.IMAGE_RESTORED:
rendering(imageBuffer);
case VolatileImage.IMAGE_OK:
imageBuffer.update();
}
while(imageBuffer.getImage().contentsLost());
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.03.2014 o 20:31, S1G napisał:

A nie prościej skorzystać z string-a? dowolna długość tekstu, spacje obsługuje (do string
trafi wszystko aż do enter-a), jest funkcja która zwróci jego długość, więc nie trzeba
pytać o nią użytkownika.

Myślałem o stringach i kojarzę tę komendę, ale za diabła nie miałem pojęcia co zrobić z tym fantem dalej. Tzn. program ma szyfrować podane wiadomości. A nie mam pojęcia (i chyba czasu na naukę całej biblioteki string) jak np. wypisać stringa od tyłu, albo jak używając stringa stworzyć kod Cezara, czy inne tego ptypu rzeczy :)

@Murith
Dzięki za pomoc. Popróbuję, chociaż wolałbym żeby te spacje zostały :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.03.2014 o 20:09, tylor2_AKA_Wylfryd napisał:

Myślałem o stringach i kojarzę tę komendę, ale za diabła nie miałem pojęcia co zrobić
z tym fantem dalej. Tzn. program ma szyfrować podane wiadomości. A nie mam pojęcia (i
chyba czasu na naukę całej biblioteki string) jak np. wypisać stringa od tyłu, albo jak
używając stringa stworzyć kod Cezara, czy inne tego ptypu rzeczy :)


Z tego co mi się wydaje to ze stringa korzystasz dokładnie tak samo jak z tablicy czarów (char).

Poza tym możesz użyć funkcji gest która czyta po kolei wpisywane znaki i umieszcza je po kolei w tablicy czarów. Funkcja strlen jest w stanie podać długość podanego tekstu bez względu na faktyczny rozmiar tablicy czarów. Tak więc przy krótkim tekście to ostatni znak w tablicy char tekst[255] to tekst[strlen(tekst)-1].
Mam nadzieję że pomogłem.

PS. Funkcja strlen jest w bibliotece string.h a funkcja gets w bibliotece stdio.h

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Korzysta z z c++ (w kodzie jest cin/out) zatem biblioteka string bez .h na końcu, a długość sprawdza przez (nazwa stringa).length().

ps akurat szyfr cezara robił bym wczytując po znaku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.03.2014 o 20:09, tylor2_AKA_Wylfryd napisał:

Myślałem o stringach i kojarzę tę komendę, ale za diabła nie miałem pojęcia co zrobić
z tym fantem dalej. Tzn. program ma szyfrować podane wiadomości. A nie mam pojęcia (i
chyba czasu na naukę całej biblioteki string) jak np. wypisać stringa od tyłu, albo jak
używając stringa stworzyć kod Cezara, czy inne tego ptypu rzeczy :)



Łapaj:
http://puu.sh/7jDtl.zip
Malutka klasa do pomocy ze stringami, napisana przeze mnie dość dawno (chciałem przenieść część fajniejszych funkcji z języka Ruby do C++ z zachowaniem identycznego nazewnictwa). Ta wersja ma w sumie z 3 metody: reverse (odwraca string), to_s (zamienia char * na string) i to_c (zamienia string na char*). Przykłady użycia:


#include <iostream>
#include "string_handler.h"
using namespace std;
typedef str::string_handler addon; //nie chcialoby mi sie pisac str::string_handler przy kazdym wywolaniu funkcji //z tej klasy wiec nadalem mu nazwe addon
int main()
{
string test="Marcin";
test=addon::reverse(test);
cout << test << endl;
char* text_w_charze= "Dzien dobry";
string test2=addon::to_s(text_w_charze);
char *test3=addon::to_c(test2);
cout << test2 << endl << test3 << endl;
return 0;
}

Ogólnie rzecz biorąc zresztą, jeśli programujesz w C++, to i tak będziesz musiał znaleźć czas żeby opanować string, char* to obecnie bardziej żart programistyczny aniżeli sensowne rozwiązanie.

Zaś co do szyfru Cezara:

string s="abba";
for (int j=0; j<s.length(); j++)
s[j]=s[j]+13;

Więc pewnie tak samo jak na charze. Tylko wygodniej bo nie musisz nigdzie jawnie deklarować długości i nie stanie się nic strasznego jeśli przypadkiem zjesz bajt zerowy. No i oczywiście ta implementacja wymagałaby pewnych modyfikacji - jeśli kod znaku jest większy niż x to powinien go zmniejszać (żeby Z zamienił np. na M a nie jakieś bliżej nieokreślone symbole) i aby ignorował spacje, np. tak:
if (s[j]=='' ''){continue;}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.03.2014 o 14:54, Shelazar napisał:

Cześć, ile zajmie mi nauka Pythona jeśli znam mniej-więcej Javę?


Z własnego doświadczenia - znając C++ postanowiłem się nauczyć Ruby (który w sumie jest główną konkurencją Pythona i też mogę polecić jako bardzo przyjazny język dla nowicjusza) - tydzień i mogłem już w nim programować realne aplikacje. Python jest bardzo prostym językiem jeśli przesiadasz się z języka niższego poziomu. Fakt że jest też kilkadziesiąt razy wolniejszy no ale cóż, to akurat normalne w językach interpretowanych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.03.2014 o 14:54, Shelazar napisał:

Cześć, ile zajmie mi nauka Pythona jeśli znam mniej-więcej Javę?

Jak znasz "mniej więcej" Angielski, to krótko, większość poleceń Pythona jest wzięta wprost z tego języka. Był zresztą projektowany właśnie pod względem łatwości pisania aplikacji w nim.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy jest jakiś elegancki sposób, aby stworzyć w C# w formie przycisk niemożliwy do focusowania (tak jak w windowsowym kalkulatorze)? Mogę zablokować focusowanie poprzez tab, jednak buttony nadal są zaznaczane poprzez kliknięcie. Znalazłem sprytny sposób polegający na przenoszeniu przy evencie focusa na specjalnie utworzony, niewidoczny przycisk o wymiarach 0 i efekt jest zadowalający, jednak technicznie wydaje mi się to rozwiązanie, hmm, mało profesjonalne. Jeśli nie ma lepszej metody, zostanę przy tym. Jakieś propozycje?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.03.2014 o 19:53, Daronn_Darker napisał:

Siedzę sobie w Qt i robię sobie notatniki, przeglądarki kalkulatorki itd. Zastanawiam
się jednak czy dałoby rade w tym stronę internetową zrobić?


Na upartego jakieś serwery są, ale musiałbyś sam na dedyku stawiać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

cześć, aktualnie staram się przyswoić chociaż trochę z języka Java - mógłby mi ktoś wytłumaczyć z jakiego powodu muszę dodać ścieżkę katalogu Java/bin do zmiennej środowiskowej Path? O ile dobrze pamiętam, podobnie było z SQLite, z którym zaczynałem w tamtym roku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 29.03.2014 o 11:34, Paweuu napisał:

cześć, aktualnie staram się przyswoić chociaż trochę z języka Java - mógłby mi ktoś wytłumaczyć
z jakiego powodu muszę dodać ścieżkę katalogu Java/bin do zmiennej środowiskowej Path?
O ile dobrze pamiętam, podobnie było z SQLite, z którym zaczynałem w tamtym roku.


W skrócie to właśnie w Java/bin masz wszystkie .exe do uruchamiania programów. Dzięki temu jak gdziekolwiek w konsoli (albo w Eclipsie) wpiszesz "javac moj_program.java" to shell będzie wiedział, co to jest za program ten javac. A on właśnie siedzi w katalogu Java/bin. A shell listę programów, jakie zna, bierze właśnie ze zmiennych środowiskowych typu PATH. Jeśli uruchamiasz jakiś program w commandlinie, wiersz polecenia (czyli shell) szuka na ścieżce PATH lokalizacji, w której może znaleźć ten właśnie program. Jeśli go nie znajduje, rzuca błędem. Wiele programów pod Windowsem trzeba tak ustawiać, żeby dało się je wykorzystać. Często przy instalacji programy "same" się dodają do ścieżki, ale jeśli nie to trzeba je ręcznie tam wpisać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 29.03.2014 o 11:34, Paweuu napisał:

cześć, aktualnie staram się przyswoić chociaż trochę z języka Java - mógłby mi ktoś wytłumaczyć
z jakiego powodu muszę dodać ścieżkę katalogu Java/bin do zmiennej środowiskowej Path?
O ile dobrze pamiętam, podobnie było z SQLite, z którym zaczynałem w tamtym roku.


Erton opisał to wyczerpująco a dla prostego zrozumienia, żebyś nie musiał za każdym razem pisać "C:/Program Files/Java/bin/javac mojprogram.java" a tylko "javac mojprogram.java"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

dzięki za odpowiedź - czyli dzięki temu nakierowujemy na system co ma robić z programami z danym rozszerzeniem. Wszystko jasne :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 29.03.2014 o 12:40, Paweuu napisał:

dzięki za odpowiedź - czyli dzięki temu nakierowujemy na system co ma robić z programami
z danym rozszerzeniem. Wszystko jasne :)
dzięki za odpowiedź - czyli dzięki temu nakierowujemy na system co ma robić z programami
z danym rozszerzeniem. Wszystko jasne :)

Może nie tyle chodzi o same rozszerzenia (chociaż to też), tylko raczej o to, gdzie siedzą programy. W przypadku polecenia "javac mojprogram.java" shell szuka programu dla "javac" a nie dla ".java".

W teorii mógłbyś napisać:

javac mojprogram.txt

I teraz chodzi o to, żeby shell wiedział, że to javac (z katalogu Java/bin) jest tym programem, który ma spróbować uruchomić mojprogram.txt i grzecznie się wypierdzielić z informacją, że nie plik z takim rozszerzeniem jest mu potrzebny do szczęścia :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 29.03.2014 o 13:29, Paweuu napisał:

A widzisz. Czyli nie było jasne. Dzięki za wyjaśnienie :)


Tutaj od siebie dodam że samemu również możesz dość łatwo tworzyć aplikacje korzystające z tego jak działa Path.
Przykładowo, napisz sobie taki kod (wersja dla C++):

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

int main(int argc, char* argv[])
{
if (!argv[1])
{
cout << "Invalid input";
return 0;
}
ifstream F(argv[1]);
string s;
while(getline(F,s))
{
if (s[0]==''#'' or s[0]==''/''){continue;}
else
cout << s << endl;
}
return 0;
}

Ma on tylko jedno zadanie - wyświetlać wszystkie linie ze wskazanego pliku o ile nie zaczynają się od # lub / (bardzo często są to bowiem komentarze).

Nazwij go sobie np. cat.exe, zapisz gdzieś. Dodaj jego ścieżkę do zmiennej systemowej PATH.
I możesz od teraz zrobić coś takiego:
http://puu.sh/7NWI8.png

I w ten oto sposób masz prostą możliwość podglądu wnętrza plików z poziomu wiersza poleceń. W Javie implementacja takiego programu jest bardzo podobna i wyglądałaby tak:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class Cat{

public static void main(String[] args) {
if(args[0].isEmpty()){return;}
File file = new File(args[0]);

try {

Scanner scanner = new Scanner(file);

while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if(line.toCharArray()[0]==''#'' || line.toCharArray()[0]==''/''){continue;}
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}


}

}

Jak oba działają? argv(C++) i args(Java) to tablice argumentów przekazywanych z wiersza poleceń po spacji od nazwy programu. Mogą to być nazwy plików, pojedyncze komendy, cokolwiek. Samo w sobie jest to dość nudne i niezbyt przydatne.
Ale dzięki wstawieniu ich do zmiennej Path komputer domyślnie sprawdza czy program o takiej nazwie istnieje w którymś z katalogów tam ustawionych, jeśli tak to go wywołuje nie zmieniając jednak "aktywnego" katalogu w którym właśnie jesteśmy.

Innymi słowy:
Nasz cat.exe jest w C:\OP, tam wstawiliśmy też element do zmiennej Path. W wierszu poleceń jesteśmy w D:\xxx\ ( http://puu.sh/7NZ1F.png). I wewnątrz tego konkretnego katalogu mamy plik main.cpp który chcemy podejrzeć. Nie musimy takiemu programowi podawać pełnej do niego ścieżki, wystarczy cat main.cpp zamiast C:\OP\cat.exe D:\xxx\main.cpp

Ot, takie pożyteczne narzędzie jeśli często my albo nasze programy korzystają z konkretnych aplikacji (które mogłyby być w różnych miejscach na dysku twardym, byleby ich nazwa pozostała bez zmian).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zaczęliśmy na zajęciach ze AI omawiać algorytm ewolucyjny. Chciałbym go napisać, ale mam już problem przy 1 funkcjach. Szukałem informacji w internetach, ale nie znalazłem nic co opisywało by mi dokładnie mój problem. Ma może ktoś jakieś materiały? Niekoniecznie w pl, ale by jakoś łopatologicznie tłumaczyły.

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ć