#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
Mam funkcję, która rozkłada jakiś tam string na wektor stringów:

std::vector mySplit(const std::string& str);
Czy bezpiecznie jest zadeklarować ją z atrybutem pure?

__attribute__((pure))
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

std


@CamelCase: Jedne z warunków, aby funkcja była pure:
* wartość zwracana musi być zależna od parametrów (pamięć globalna na którą wskazuje jeden z parametrów nie jest uznawana za parametr),
* nie może pisać po pamięci globalnej (może natomiast czytać z niej),
* funkcja nie może
  • Odpowiedz
wartość zwracana musi być zależna od parametrów (pamięć globalna na którą wskazuje jeden z parametrów nie jest uznawana za parametr),


@8tab: nieprawda, ten warunek jest inny: wartość zwracana nie może być zależna od niczego innego oprócz parametrów (argumentów) lub/i zmiennych globalnych.
  • Odpowiedz
@pkh:
Z tym transcount - not tak, skad bym wiedzial ile razy petle for wykonac, obviously!

Dzieki za wyjasnienie tej petli.
Nie do konca jednak rozumiem, co w ten GetNextEvent wpisac?
Bo z tego co zrozumialem, funkcja wywolana przez pointer trans[]i.fn ustawia mi nastepny stan, po tym jak wykona inne
  • Odpowiedz
@jansek: I dokladnie tak sie dzieje.
Jestes w stanie INIT. I teraz dostajesz event EV. Teraz sprawdzasz wszystkie wpisy w tablciy trans, i szukasz takiego który ma stan INIT i event na EV. Wtedy wykonujesz jego funkcje, który zmienia stan na inny.

Przemysl sobie to ze w maszynie stanow, stan w jakim obecnie jestes ma wplyw na to jak event bedzie obsluzony.
  • Odpowiedz