6 / 6
Mar 2017

Witajcie
Mam mały problem z zadaniem FLAMASTER. Mianowicie wyjde mi się, że to na co wpadłem powinno działać. Lecz tak się nie dzieje. Wydaje mi sie, że to przez konwersje danych bo liczby w tablicy char są dziwnie zamieniane.
Oto kod:




using namespace std;

int main() {

char org[210]; // oryginalna tablica
char kop[210]; // tablica do ktorej bedziemy kopiowac
int ile; // ile wierszy kodu
int p=0, r=0, z=1; // zmienne pomocnicze

cin>>ile; // wczytanie n

for(int i=0; i<ile; i++) // petla ktora wczyta n kodow
{
// wczytanie kodu
cin>>org;

// przepisanie pierwszego znaku
kop[0]=org[0];

// petla w ktorej dokonujemy przepisania w skroconej wersji
for(p=0; p<210; p++)
{

if(org[p] == org[p+1]) z++; // jesli kolejny znak jest taki sam zmienna pom ++;

else 
    if(z<3) {            // jesli jest inny znak i wczesniejsze znaki powtarzaja sie 1/2 razy
    kop[p+1]=org[p+1];
    }
    else if(z>2)   // gdy znak powtarza sie >3 razy
    {
        r=z-2;         // zmienna aby wiedziec gdzie wstawic liczbe wystapien
        kop[p-r]=(int)z;        // wpisanie ilosci wystapien za znakiem ktory byl ostatnio
    }
    z=1;      // nadanie zmiennej pomocniczej jeden, odpowiada za ilosc wystapien znaku
}

}

// wyswietlenie przerobionej tablicy
for(int j=0; j<210; j++)
{
cout<<kop[j];
}

system("PAUSE");
return 0;

}

Będę wdzięczny za wszelką pomoc. Jeśli chodzi o #include to nie ma dyrektyw specjalnie. Bugował się przy wstawianiu
Pozdrawiam

  • created

    Mar '17
  • last reply

    Mar '17
  • 5

    replies

  • 443

    views

  • 3

    users

  • 1

    link

Ciężko Ci pomóc, bo ten kod nie działa nawet dla danych z przykładu. Moim zdaniem wypisujesz w złym miejscu i działasz na całej tablicy nie sprawdzając jak długi jest wyraz na wejściu. To tak na pierwszy rzut oka.

system("PAUSE") raczej też nie powinien wystąpić w gotowym kodzie.

Teraz zrobiłem to zupełnie inaczej. Lecz problem dalej jest. Tym razem gdy na samym koncu mam wypisac znak ktory ostatnio sie powtorzyl.

Kod:

include

include

include

using namespace std;

void sprawdz(string napis)
{

int counter = 1;
string pom;

for(int i=0; i<napis.size(); i++)
{

   if(napis[i]!=napis[i+1]) { if(counter<3) { cout<<napis[i]; counter=1; } else cout<<pom<<counter; counter=1;}

    else 
    {     
         counter++;
     pom=napis[i];

    }

   }


    cout<<endl;

}

int main() {

int ile_razy;
string napis ="";

cin>>ile_razy;

for(int i=0; i<ile_razy; i++)
{
cin>>napis;
sprawdz(napis);

}

system("PAUSE");
return 0;

}

  1. kod najlepiej linkuj do ideone.com tam mona od razu przetestowć dzianie programu

starczy po prostu string napis
3. Usuń system("PAUSE"). Po co to tu w ogóle jest?
4.

to jest błędne, bo string to nie char tylko tablica charów

Problem tkwi w tym, że nie działa ani nie moge nic wymyśleć dla przypadku gdy na koncu cos sie powtarza.