• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C - Problem flagi holenderskiej (Edsger Dijkstra)

Object Storage Arubacloud
0 głosów
216 wizyt
pytanie zadane 26 marca 2021 w C i C++ przez warzywko13 Użytkownik (840 p.)

Witam,

Mam problem z działaniem skryptu. Mianowicie przy próbie skompilowania kompilator wywala mi masę krzaków o konwersji z char* na char itp. Próbuję sobie z tym poradzić od jakiegoś czasu ale bezowocnie. 

Błagam o pomoc :(

Kod:

#include <stdio.h>
#include <string.h>

int main(){

  char* tab = "RBWRRBWBB";
  int prawy = strlen(tab) - 1;

  int lewy = 0;
  int srodek = 0;



  while (srodek <= prawy){

    if (tab[srodek] == 'R'){
      char *t = tab[lewy++];	
      tab[lewy++] = tab[srodek++];
      tab[srodek++] = t;

    }else if(tab[srodek] == 'B'){
      char *t = tab[srodek];	
      tab[srodek] = tab[prawy--];
      tab[prawy--] = t;

    }else{
      srodek++;
    }

  }

  for (int i = 0; i <= prawy; i++){
    printf("%c\n", tab);
  }

  return 0;
}

 

 

komentarz 26 marca 2021 przez TOWaD Mądrala (5,700 p.)
edycja 26 marca 2021 przez TOWaD
nie wiem ale cout<<sizeof (char*), z reguły powinno wyścielić  4B RBWRRBWBB to ma co najmniej 9B i wskaźnik wskazuje na coś. Palec wskazujący ma swój rozmiar to nie znaczy ze nie można nim wskazać ciężarówki, czy drzewa.
komentarz 26 marca 2021 przez tkz Nałogowiec (42,000 p.)

Z reguły cout<<sizeof (char*) powinien wyświetlić liczbę zależną od systemu. Tak jak na 32 bitowej maszynie - 4, a na 64 bitowej - 8. 

      char *t = tab[lewy++]; lewy = 0   
      tab[lewy++] = tab[srodek++]; lewy = 1, srodek = 0
      tab[srodek++] = t; srodek = 1

Na pewno o to chodziło? Wygląda to kompletnie bezsensu. 

komentarz 26 marca 2021 przez warzywko13 Użytkownik (840 p.)
Wzoruje się na skrypcie ze strony https://mattomatti.com/pl/a0062

Sprawdzałem go i działał jako c++ więc myślę że po przerobieniu na c też powinien chodzić
komentarz 26 marca 2021 przez tkz Nałogowiec (42,000 p.)
swap(tab[lewy++], tab[srodek++]); //2 inkrementacje

char *t = tab[lewy++];             //
tab[lewy++] = tab[srodek++];  // 4 inkrementacje 
tab[srodek++] = t;                   //

Widzisz różnice? 

komentarz 7 kwietnia 2021 przez TOWaD Mądrala (5,700 p.)

@tkz,

Wiem totalną bzdurę napisałem, bo to C, ale w C++ już się trochę broni krzaq.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 457 wizyt
pytanie zadane 14 czerwca 2021 w C i C++ przez warzywko13 Użytkownik (840 p.)
+2 głosów
6 odpowiedzi 11,459 wizyt
pytanie zadane 8 listopada 2017 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
0 odpowiedzi 235 wizyt
pytanie zadane 11 października 2018 w Mikrokontrolery przez Spektral Początkujący (410 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...