Dla niektórych wakacje się kończą. Więc proponuję małą zabawę dla ludzi spod znaków #programowanie a szczególnie #jezykc oraz #cpp przy rozwiązywaniu (jak myślałem prostego, ale testowa grupa pokazała, że jest trochę podchwytliwy i wyszedł trudniejszy niż zakładałem) quizu.
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Kaczus2B:

Jeśli chodzi o przykład z niezadeklarowaną wartością, to zauważ, ze odnosi sie to do typu integer, przy innych typach mogłoby to rzeczywiście niezdefiniowane zachowanie, przy typie integer będą w pamięci śmieci. więc wypisze po prostu przypadkową wartość.


@Kaczus2B: kompilator ma dowolnosc zoptymalizowac to jak tylko mu sie nie podoba - clang bezwzglednie stara
  • Odpowiedz
Mireczki z #naukaprogramowania . Potrzebuję zaimplementować funkcję G w #jezykc
Próbuję użyć ale nie za bardzo mi to idzie. Czy jest to w ogóle do zrobienia w jakiś prosty sposób w C czy muszę sobie napisać wszystkie funkcje operujące na liczbach zespolonych?
Zmiana języka nie wchodzi w grę, bo jest to ćwiczenie do zrobienia w C :)
Może w #cpp ktos będzie wiedział. Nie proszę o
FantaZy - Mireczki z #naukaprogramowania . Potrzebuję zaimplementować funkcję G w #je...

źródło: comment_uTMJnnRORv5lBQCxComc88thdIaM1B1U.jpg

Pobierz
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@FantaZy: za bardzo 'na pałe' chcesz to zrobic ( ͡º ͜ʖ͡º)

opcji jest kilka:
1) rozpisz ta funkcje na kartce i poskracaj co trzeba i sam sobie zaimplementuj jej zachowanie, osobno dla czesci rzeczywistej, osobno dla urojonej
2) zobacz co to jest i naucz sie uzywac/definiowac liczby urojone z niej, byc moze nie ma tam 'I"
3) zobacz co to jest , bo to inna
  • Odpowiedz
#programowanie #jezykc
Potrzebowałby malutkiej podpowiedzi do języka C
1. Program, który pyta ile liczb pobrać, następnie prosi o podanie tych liczb, a wyświetla te liczby w odwrotnej kolejności
2. Program, który pobiera liczbę a następnie odwraca cyfry w niej zawarte.

----
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie
Jakieś rady czym rozwiązać taki problem:
Mamy zbiór znaków (jakieś wzorki na kartce zamieniam na numery tak że krzak pierwszy na kartce to 1 itd) i wiemy że będą one jednoznacznie określać litery tworzące logiczne zdanie tylko nie wiemy jakiego języka. Wiec mamy pliki słowników oraz plik opisujący szyfr.
Próbuje #bash pod #linux ale potwor mi z kodu wychodzi tak ze pytam o rady #
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wytrzzeszcz: chodzi o zwykły szyfr afiniczny? Policz częstotliwości występowania znaków i nałóż na to statystykę danego języka. Przy dłuższym zaszyfrowanym tekście powinno się udać.
  • Odpowiedz
@Kadet: @Phallusimpudicus: Ten wzór to raczej *(tab + i), bo arytmetyka wskaźników bierze pod uwagę rozmiar elementu, ewentualnie *((char *)tab + i * sizeof(typ)).

Chcesz dokonywać modyfikacji, które nie będą trwałe na oryginale tablicy?


@Phallusimpudicus: Nie chcę dokonywać modyfikacji, po prostu CUDA ma własny mechanizm do przekazywania argumentów do kernela na GPU, a akurat mam tablicę wielkości 4 (zawsze 4) i nie chciałem jej alokować dynamicznie, a
  • Odpowiedz
Jest jakakolwiek różnica między tymi dwoma przykładami?
Chyba w obu przypadkach nie da się przepełnić bufora? Czy jak to się tam zwie,

char nap[10];
printf("Podaj wyraz");
if(gets(nap))
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Skoro procesowi potomnemu tworzone są jego własne kopie zmiennych, to czemu:

int i = 2;
fork();
printf("%p", &i);


wyświetla
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@blackyabbol: każdy proces ma własną przestrzeń adresową - poczytaj sobie o pamięci wirtualnej bo to jest dosyć rozległy temat. Idea jest taka, że nie odwołujesz się bezpośrednio do adresów w pamięci fizycznej - po drodze procesor robi translację Twojego adresu wirtualnego na adres fizyczny.
  • Odpowiedz
@blackyabbol: To nie jest tak, że jakieś zmienne są kopiowane. Cała przestrzeń adresowa jest kopiowana, a procesy nie mają żadnego (naprawdę żadnego) dostępu do danych (zmiennych) innych procesów. To znaczy, jeżeli odwołasz się do adresu 0x12345 w jednym i w drugim procesie, to (o ile taki adres jest w ogóle przydzielony) odwołasz się do 2 różnych miejsc w pamięci fizycznej.

Randomizacja nie może dotykać już zaalokowanej pamięci, bo to popsułoby
  • Odpowiedz
#programowanie Ponieważ zauważyłem, że programiści zarówno #jezykc jak i #cpp używają funkcji scanf. Często niektórzy niestety źle podają parametr do wypełnienia tablicy znakowej. Rozumiem, większość to byli początkujący. Przerażenie mnie jednak wzięło, jak w poradnikach na sieci takowe znalazłem. Dla równowagi do mojej skrzyni porad dodałem adekwatny wpis.
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Kaczus2B: Tablica to nie wskaźnik, nie ma znaczenia czy statyczna czy nie. Wskaźnik to zwykła zmienna, tablica to ciąg n zmiennych, który niejawnie się konwertuje do wskaźnika na jej pierwszy element przy pierwszej nadarzającej się okazji.
  • Odpowiedz
Następny etap nauki wskaźników, zaraz po tablicach wskaźników, jest odwołanie wskaźników? Chodzi o to żeby wskaźnik wskazywał wskaźnik. Wytłumaczy mi ktoś jakim cudem to działa,

int main()
{
char tab[10],**wdw,*w; // działający przykład
w=&tab
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Hertesus: możesz zrobić gets(tab); nie do końca rozumiem problem. Może poćwicz wskaźniki np. na intach, bez tablic? Tablice w C są... dziwne, bo są bardzo blisko wskaźników, ale łatwo się poplątać.

BTW: char* w = &tab wygląda kiepsko -- tu chyba jest niezgodność typów. Być może zależy od standardu C - dawno nie pisałem w tym języku. Wg. mnie w = tab, lub w = &tab[0] wyglądają lepiej. Co nie
  • Odpowiedz
Czuję się coraz pewniej używając wskaźników, więc napisałem sobie program który używa wskaźników, zamienia w duże litery na małe, a małe na duże. I o dziwo ten program działa. Przy okazji poznałem dwie funkcje. toupper i tolower.

#naukaprogramowania #jezykc #wskazniki
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Krok po kroku zaczynam rozumieć jak działają wskaźniki. Może i nie są to wielkie postępy, ale się cieszę.
Jest w ogóle możliwe rzutowanie w dół?
Wiem że, da sie zrobić z int double albo float, ale czy da się zrobić z float , int?

int main()
{
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Ciąg dalszy nauki wskaźników, Otóż przypisałem wskaźnikom zmienne czy jak to tam się nazywa,
Ale do rzeczy, jak już odpaliłem ten program, to on mi zwrócił takie coś
0xb757ee55,(nil),0xbeee3a50, O ile się orintuję to 1 i 3 to są adresy zmiennych w pamięci zapisane w systemie szesnastowym, Ale co to jest te (nil)? A drugie pytanie co w ogóle robi "%p"?

int main()
{
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Hertesus: Nie pomyl się przy definiowaniu zmiennych, bo czuję że ten zapis mógł Cię zmylić.
int *c,ch; - ta linia nie deklaruje wskaźnika c i integera ch, tylko dwa wskaźniki. Gwiazdka jakby "należy" do typu zmiennej a nie jej nazwy. Dlatego ja preferuję zapisywać to tak, wtedy jest wszystko jasne.
int* c, ch;

W tym programie deklarujesz więc 6 pustych wskaźników na int. I teraz tak:
* to operator wyłuskania, więc używając
  • Odpowiedz
@Hertesus: to zależy co chcesz osiągnąć.
Jeśli chodzi o funkcję printf oraz %p, no to wypisuje to wartość zmiennej w postaci przeznaczonej dla adresów zmiennych.
Jeśli sobie zadeklarowałeś 3 zmienne: ch, xh, mh i następnie przypisałeś ich adresy (za pomocą operatora uzyskania adresu &) do wskaźników c, x, m i:
- chcesz wyświetlić ich wartości mając do dyspozycji tylko wskaźniki:
to źle wpisujesz do funkcji printf, ponieważ zamiast %p powinno być %i lub %d
  • Odpowiedz
@Hertesus: Polecam poczytać książkę Stephena Praty o C, tam są dobrze opisane wskaźniki. I uważaj ze wskaźnikami. Łatwo sobie oko takim wskaźnikiem wybić.
  • Odpowiedz