Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

symfonia standard ćw XXIII str 218

Ostatnio zmodyfikowano 2013-06-05 18:32
Autor Wiadomość
NHFL
Temat założony przez niniejszego użytkownika
symfonia standard ćw XXIII str 218
» 2013-05-05 22:59:10
napisz funkcje ktora do końca stringu bedącego w jednej tablicy dołączy string bedący w drugiej tablicy funkcja powinna przerwać dołączanie stringu w przypadku zapełnienia całej tablicy

mam pytanie skąd się biorą te śmieci na końcu tab1 bo kompilacji dodam ze gdy "rozmiar" jest większy np 100 to wszystkie literki
sie mieszczą w tab1 i nie występuje ten problem

C/C++
#include <iostream>
#include <conio.h>

using namespace std;
void dodaniestringa( char tab1[], char tab2[], const int rozmiar )
{
    for( int x = 0; x <= rozmiar; x++ )
    {
        if( tab1[ x ] == 0 )
        {
            static int y = 0;
            tab1[ x ] = tab2[ y ];
            y++;
        }
    }
}
int main()
{
    const int rozmiar = 25;
    char tab1[ rozmiar ] = { "Mam na imie Marcin " };
    char tab2[] = { "i lubie programowac" };
    dodaniestringa( tab1, tab2, rozmiar );
    cout << tab1;
    getch();
}
P-82149
DejaVu
» 2013-05-05 23:22:29
1. Ostatni znak w łańcuchu znaków powinien mieć wartość = 0.
2. Wywal to słowo kluczowe 'static', bo Ci ono kuku zrobi jak dwa razy wywołasz swoją funkcję.
3. Wychodzisz poza zakres tablicy :)
4. Ten algorytm jest błędny.

Błędy w linijkach:
C/C++
for( int x = 0; x <= rozmiar; x++ ) //błąd
{
    if( tab1[ x ] == 0 ) //błąd
    {
        static int y = 0; //błąd
        tab1[ x ] = tab2[ y ];
        y++;
    }
}
Poprawa błędnych linijek nic nie da - w zasadzie musisz napisać kod funkcji od nowa...
P-82156
NHFL
Temat założony przez niniejszego użytkownika
» 2013-05-06 14:21:21
nieco zmodyfikowalem kod teraz pewnie jest wszystko dobrze te śmieci to wynik braku NULL'a na końcu tak jak napisałeś

C/C++
int y = 0;
for( int x = 0; x < rozmiar - 1; x++ ) // w ten sposob zostawiamy ostatni NULL w tablicy bo string musi
//konczyc sie zerem
{
    if( tab1[ x ] == 0 )
    {
        tab1[ x ] = tab2[ y++ ];
    }
}

tylko nie rozumiem dlaczego zaznaczyles mi w tej linijce
if( tab1[ x ] == 0 )
 błąd przecież gdy tablica nie jest zapełniona wartościami to pozostałe jej elementy są inicjalizowane zerami ja to wykorzystałem
P-82182
DejaVu
» 2013-05-29 22:29:51
Nadal masz błędy w algorytmie - zrób proste wywołania funkcji, którą piszesz i sprawdzaj czy wyniki zwraca Ci poprawne.
P-84305
NHFL
Temat założony przez niniejszego użytkownika
» 2013-05-30 16:40:09
po miesiącu odpisałeś ale to nic nie szkodzi ;) teraz moge wywoływać funkcję tyle razy ile dusza zapragnie
C/C++
int y = 0;
for( int x = 0; x < rozmiar - 1; x++ ) /
{
    if( tab1[ x ] == 0 )
    {
        if( tab1[ x ] == tab2[ y ] ) break;
       
        tab1[ x ] = tab2[ y++ ];
    }
}
P-84352
DejaVu
» 2013-05-30 17:02:47
Ale kod jest nadal błędny :P
P-84357
NHFL
Temat założony przez niniejszego użytkownika
» 2013-05-30 20:13:38
dlaczego? teraz o ile zwiększe rozmiar tablicy pierwszej to moge wywolywać tą funkcję ile razy zechce i za każdym razem dopisze mi poprawnie tekst do tej tablicy pierwszej z innych tablic
P-84395
DejaVu
» 2013-06-03 14:57:47
Pętla nie przechodzi po wszystkich znakach.
P-84709
« 1 » 2
  Strona 1 z 2 Następna strona