Reklama
Pokazuje wyniki od 1 do 13 z 13

Temat: [C++] Chcę napiać coś co mi sprawdzi czy w tablicy nie ma znaku

  1. #1

    Data rejestracji
    2014
    Posty
    560
    Siła reputacji
    10

    Domyślny [C++] Chcę napiać coś co mi sprawdzi czy w tablicy nie ma znaku

    Mam coś takiego:

    Kod:
               if(
               for (c=0; c<51;){
               if(wpisane[c]!=znak)
               c++;} ) {wykonano=wykonano +1;}
    wpisane- to tablica,W której są litery, które podało się wcześniej
    znak- to aktualna podana literka
    c-licznik
    wykonano- to zmienna, w której przechowuje się ile razy wydrukowano znak

    Mam taki pomysł na funkcje:
    Kod:
    prototyp: czyniema (char wpisane, char znak);
    wywołanie: czyniema (char wpisane, char znak);
    funckja:int czyniema(char wpisane, char znak){
    	int c=0;
    	for (c=0; c<51;){
    		if(wpisane[c]==znak) {return powtorka=1;}
    	}
    }
    Ale to mi nie działa, bo chyba nie mogę w if'a, dawać pętli ? Chciałem to zrobić funkcją, ale nie wiem jak przekazać te parametry, w ogóle przeczytałem, że funkcja nie może zwrócić wartości tablicy... A może je przyjąć?

    Ogólnie to muszę sprawdzić czy aktualnie podany znak już nie został wcześniej podany...
    Ostatnio zmieniony przez Hardware : 18-10-2015, 18:53

  2. #2
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,026
    Siła reputacji
    27

    Domyślny

    W ifa nie możesz dać pętli, bo pętla nie ma żadnej wartości logicznej.
    A w "pomyśle" twoja pętla nie ma kroku, więc będzie się cały czas wykonywać z c == 0. Zmienna powtorka nie jest zadeklarowana. Wpisane nie jest tablicą tylko znakiem, a potem używasz jak tablicę. Brakuje returna.

    Funkcja może przyjąć tablicę jako argument, jak również zwracać tablicę.
    Ostatnio zmieniony przez Tibiarz : 18-10-2015, 19:23

  3. Reklama
  4. #3
    Avatar Qsty
    Data rejestracji
    2010
    Posty
    66
    Siła reputacji
    15

    Domyślny

    WTF ?

    Piszesz i tłumaczysz tak chaotycznie, że ciężko cokolwiek ogarnąc o kodzie nie wspomne .


    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Ale to mi nie działa, bo chyba nie mogę w if'a, dawać pętli ?
    możesz dawać ifa w pętli


    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    że funkcja nie może zwrócić wartości tablicy
    może


    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    A może je przyjąć?
    może

    //

    Napisanie tego co chcesz osiągnąć to funkcja mająca 5 linijek
    Ostatnio zmieniony przez Qsty : 19-10-2015, 09:42

  5. #4
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,026
    Siła reputacji
    27

    Domyślny

    Cytuj Qsty napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    możesz dawać ifa w pętli
    Ale jemu chodzi o pętlę wewnątrz ifa.
    Też na początku źle przeczytałem, bo prawda - strasznie chaotycznie napisane.

  6. #5
    Avatar H4k3r
    Data rejestracji
    2007
    Posty
    83
    Siła reputacji
    17

    Domyślny

    Kod:
    #include <iostream>
    
    using namespace std;
    
    void czyniema (char wpisane[], int rozm)
    {
        char znak;
        cout << "Podaj znak: ";
        cin >> znak;
        for (int i=0; i < rozm; i++)
        {
            if(znak == wpisane[i])
            {
                cout << "znak jest juz w tablicy";
            }
    
        }
    
    }
    
    int main()
    {
        char c[] = { 'a', 'b', 'c', 'd', 'e' };
        int rozm = sizeof(c);
    
        czyniema(c,rozm);
    }

    ogólnie musisz podać do funkcji tablice ze znakami które już były i rozmiar tej tablicy


    Naxx: lubisz moją mame?
    h4k3r: ta, ale nie pisz takich głupot ;/
    Naxx: to nie są głupoty znam cie czlowieku i sie pytam

  7. #6

    Data rejestracji
    2014
    Posty
    560
    Siła reputacji
    10

    Domyślny

    Jeszcze raz. Trochę przeczytałem i walczę ciągle. Ale coś mi nie wychodzi.

    Kod:
    prototyp: int czyniema (char q[50], char w);
    wywołanie: czyniema (wwpisane[50], zznak);
    funkcja:
    
    int czyniema(char q[50], char w){
    	int c=0;
    	int powtorka=0;
    	for (c=0; c<51;){
    		if(q[c]==w) {return powtorka=1;}
    		c++;
    		
    	}
    }
    q i w to odpowiedniki <<wwpisane i zznak
    wwpisane i zznak to zmienne do których przepisałem wartości zmiennych wwpisane[50]=wpisane[50]; zznak=znak;
    w znaku mam aktualnie wciśniętą literkę, wpisane zbiera wszystkie wpisane literki, mam to już napisane w programie głównym
    w funkcji musi być na końcu return 0;? Z tej funkcji jeśli litera się powtarza, chcę zwrócić powtórkę.

    Aktualnie kompilator wywala mi tylko jeden błąd:
    Załącznik 341287
    Ostatnio zmieniony przez Hardware : 19-10-2015, 00:02

  8. #7
    Avatar Qsty
    Data rejestracji
    2010
    Posty
    66
    Siła reputacji
    15

    Domyślny

    @up

    http://bfy.tw/2M2e

    i naucz się pisać fora.

    ma być:

    Kod:
    for (c=0; c<51;c++) {
    //instrukcje
    }
    bo to co Ty piszesz to połączenie fora z whilem ;o

    Przy okazji powiem, że wśród programistow przyjęło się iterowanie za pomocą zmiennych i, j, k. Nie jest to jakiś błąd, że piszesz c, ale skoro sie uczysz to wyrabiaj sobie dobre nawyki.
    Ostatnio zmieniony przez Qsty : 19-10-2015, 10:23

  9. #8

    Data rejestracji
    2014
    Posty
    560
    Siła reputacji
    10

    Domyślny

    Dzięki wielkie za pomoc. Poszły reputy, już prawie mam wszystko ok. Mam problem, żeby funkcja zwróciła wartość powtórka. Normalnie wartość powtórki się zmienia wewnątrz funkcji, ale niestety nie działa to już na zewnątrz. Powtorka ma ciągle wartość 0.

    Kod:
     	if (znak == s[t])
    		{
               cout<<znak;
               powtorka=0;
               czyniema (wpisane, znak, powtorka);
               if(powtorka==0) {wykonano=wykonano +1;}
               wpisane[i]= znak;
               gotoXY (x, y+21);
    		   cout<<"Wykonano:"<<wykonano;
            }
    
    int czyniema(char q[50], char w, int powtorka){
    	int c=0;
    	int x, y;
    	for (c=0; c<51;){
    		if(q[c]==w) {powtorka=1;}
    		c++;
    		}
    		return powtorka;
    }

    Cytuj Qsty napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @up

    http://bfy.tw/2M2e

    i naucz się pisać fora.

    ma być:

    Kod:
    for (c=0; c<51;c++) {
    //instrukcje
    }
    bo to co Ty piszesz to połączenie fora z whilem ;o

    Przy okazji powiem, że wśród programistow przyjęło się iterowanie za pomocą zmiennych i, j, k. Nie jest to jakiś błąd, że piszesz c, ale skoro sie uczysz to wyrabiaj sobie dobre nawyki.
    Ty a jak się daje c++ na początku funkcji to, to nie przeszkadza? Tzn. chodzi mi o to, czy nie zwiększa argumentu od razu o jeden? Taki problem pamiętam jak się uczyłem na początku programowania i wole sobie to dawać na końcu pętli.
    Ostatnio zmieniony przez Hardware : 19-10-2015, 20:00

  10. #9
    Avatar 2cztery7
    Data rejestracji
    2014
    Posty
    628
    Siła reputacji
    10

    Domyślny

    http://ideone.com/jVVsc9
    najpierw wykonuje się ciało pętli, potem ostatnia część fora

  11. #10
    Avatar Maciek_1993
    Data rejestracji
    2006
    Posty
    2,483
    Siła reputacji
    19

    Domyślny

    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.



    Ty a jak się daje c++ na początku funkcji to, to nie przeszkadza? Tzn. chodzi mi o to, czy nie zwiększa argumentu od razu o jeden? Taki problem pamiętam jak się uczyłem na początku programowania i wole sobie to dawać na końcu pętli.
    Ale tutaj dajesz w miejscu które definiuje całego fora (wartosc poczatkowa;warunek zakonczenia petli;krok petli) wykonujesz wszystko co jest w {} i wykonujesz krok, sprawdzając czy warunek zakończenia nie jest spełniony.
    Ofc możesz to pominąć i np napisać (c=0;;c++) czy coś takiego, tak samo możesz napisać (c=0;c<51;) ale jak nie ogarniasz jak tego używać to będą błędy xd

  12. #11
    Avatar Tibiarz
    Data rejestracji
    2008
    Położenie
    Tibiantis
    Wiek
    4
    Posty
    16,026
    Siła reputacji
    27

    Domyślny

    Cytuj Qsty napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    i naucz się pisać fora.

    ma być:

    Kod:
    for (c=0; c<51;c++) {
    //instrukcje
    }
    bo to co Ty piszesz to połączenie fora z whilem ;o
    To też jest działająca pętla for, bo zasadniczo, to
    Kod:
    for (c=0; c<51;c++) {
    //instrukcje
    }
    da taki sam wynik, co
    Kod:
    for (c=0; c<51;) {
    //instrukcje
    c++;
    }
    jak on tam miał. A jako że zaraz przed forem ma c = 0; to mogłoby być nawet
    Kod:
    int c = 0;
    for (;c<51;) {
    //instrukcje
    c++;
    }
    Co nie zmienia faktu, że pisanie w ten sposób jest bez sensu.

    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Ty a jak się daje c++ na początku funkcji to, to nie przeszkadza? Tzn. chodzi mi o to, czy nie zwiększa argumentu od razu o jeden? Taki problem pamiętam jak się uczyłem na początku programowania i wole sobie to dawać na końcu pętli.
    Nie. To się wykonuje po każdym obrocie pętli. I nieważne czy będzie c++ czy ++c.
    A co do twojego kodu, to nic nie idzie zrozumieć z niego.
    Po co przekazujesz tę zmienną powtorka do funkcji, która potem zwraca jej wartość? Dlaczego deklarujesz jakies int x i y, jak potem ich nie używasz? Dlaczego ta pętla się nie kończy po pierwszym podstawieniu powtorka = 1; skoro potem już nic się nie może zmienić? Poza tym, for(c = 0; c < 51; c++) sprawia, że wyjeżdżasz poza zakres swojej tablicy.
    Ostatnio zmieniony przez Tibiarz : 19-10-2015, 20:24

  13. #12
    Avatar Wielkie Zło
    Data rejestracji
    2008
    Posty
    819
    Siła reputacji
    17

    Domyślny

    http://www.programiz.com/c-programming/c-for-loop

    A tak ogólnie to polecam najpierw poczytać a później brać się za programowanie. Później wychodzą takie kwiatki.
    Cytuj SedaN* napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    kiedys jak bylem gowniarz, jakies 11lat mialem to na quo vadis nie chcieli mnie wpuscic ale bylem z kumplem i jego ojcem wiec zagadal i weszlismy (w scenach hard mielismy oczy zakrywac.. ALE BYLEM TAKI SZALONY, ZE TEGO NIE ROBILEM :])
    Programiści Torga łączcie się! Zapraszamy:
    http://webchat.freenode.net/
    kanal: #torgdevs

  14. #13
    Avatar kuba_k31
    Data rejestracji
    2006
    Wiek
    29
    Posty
    2,322
    Siła reputacji
    19

    Domyślny

    Cytuj Hardware napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Dzięki wielkie za pomoc. Poszły reputy, już prawie mam wszystko ok. Mam problem, żeby funkcja zwróciła wartość powtórka. Normalnie wartość powtórki się zmienia wewnątrz funkcji, ale niestety nie działa to już na zewnątrz. Powtorka ma ciągle wartość 0.
    Powtorka wynosi ciagle 0, bo powtorka w funkcji to nie to samo co powtorka w mainie. Funkcja pracuje na kopii zmiennej powtorka i po jej wykonaniu zmienna ta znika. Mozesz uzyć referencji i przekazać argument int &powtorka i wtedy będziesz pracował na tej samej zmiennej. Tak jak tutaj:
    Kod:
    void czyniema(char q[50], char w, int &powtorka){
    	for (int c=0; c<51; c++){
            if(q[c]==w) powtorka = 1;
        }
    }
    Ale lepiej będzie jak zrobisz tak jak tutaj:
    Kod:
    int czyniema(char q[50], char w){
    	for (int c=0; c<51; c++){
    		if(q[c]==w) return 1;
    		}
    		return 0;
    }
    Twoja funkcja czyniema zwraca int, ale do niczego go nie przypisujesz. Aby wykonać funkcje i zapisać wynik musisz napisać zmienna = funkcja(). Wtedy funkcja się wykona i zapisze zwróconą wartość do zmiennej.
    Kod:
    if (znak == s[t])
    		{
               /* jakis tam kod */
               powtorka = czyniema (wpisane, znak);
               /* jakis tam kod */
            }
    Ostatnio zmieniony przez kuba_k31 : 21-10-2015, 16:17
    Cytuj Minsafo napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    domknąłem

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. W czym napiać bociaka do tibi
    Przez Hardware w dziale Programowanie
    Odpowiedzi: 6
    Ostatni post: 18-09-2016, 22:44
  2. Sprawdzi ktoś logi, pls Vaaadim
    Przez KokoKaka w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 15-08-2015, 23:59
  3. Logi OTL - sprawdzi ktoś?
    Przez KIMBOS w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 3
    Ostatni post: 07-06-2014, 18:06
  4. Nowy serwer OTS spod znaku RonIT!
    Przez Archarius w dziale Niusy
    Odpowiedzi: 0
    Ostatni post: 28-11-2012, 20:56
  5. Nowy serwer spod znaku RonOTS
    Przez Archarius w dziale Niusy
    Odpowiedzi: 0
    Ostatni post: 12-09-2012, 18:52

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •