Forum: c++ knäcka

Forum huvudsida -> Programmering -> c++ knäcka

Sidor: 1

Till botten

freddiv 11:45 - 11:a Januari 2008 | Post #1
Medlem
Inlägg: 4


Skicka PM
hej! tänkte göra ett program som ska skriva ut alla möjliga bokstäver a-ö.

jag tänkte mig typ en array där man skriver in det man har av ett ord som i hänga gubbe, tex _a_a_e_ fast understrecken ska vara nollor. ordet ska vara bananen, men om man kunde göra så att man fick den att skriva ut aaaaaea, baaaaea, caaaaea... osv ni fattar. skulle vara väldigt tacksam om någon kunde göra en struktur i skriptet så jag vet hur jag ska börja. för jag tror det är rätt så komplicerat. tack på förhand / samuel




Slash 17:33 - 11:a Januari 2008 | Post #2
Medlem
Inlägg: 141


Skicka PM
Det är precis samma tänk som vanliga tal. Om du har ett tal 6789 och lägger till 1 så läggs ettan till på sista siffran. Om siffran råkar vara nio (som i det här fallet så blir den noll och istället ökas nästa siffra.

6789 + 1 = 6790

Gör bara samma sak fast med tecken:

cdzz + 1 = ceaa

-ka sista tecknet, men om det råkar vara ''z'' så sätt den till ''a'' och gör samma sak på nästa tecken. Går såklart göra i vilken ordning som helst, från vänster->höger, höger->vänster eller hoppa över bokstäver.

Nån typ av semipsudo-kod för att öka en vända:

arr = "aaaa"
for (int i = 0; i < strlen(arr); i++)
{
    if (arr[i] == ''z'')
    {
        arr[i] = ''a'';
    }
    else
    {
        arr[i]++;
        break;
    }
}

(eventuella fel lämnas som övning till läsaren).

Då måste också se till att den fattar när den är klar, men det får du lista ut självSmiley


-------------------------
Ingen sigantur!

Senast redigerad 17:35 - 11:a Januari 2008


freddiv 21:05 - 12:a Januari 2008 | Post #3
Medlem
Inlägg: 4


Skicka PM
tror du har fått det hela fel, vet att min beskrivning inte var helt klar så jag skriver en ny.


det jag vill att programmet ska göra är att först fråga efter ett ord, dvs hur långt det är.

om jag skriver siffran 2 så innebär det att ordet innehåller 2 bokstäver, vilka som helst från a-ö.

det programmet ska göra är att skriva ut alla möjliga kombinationer i dom 2 platserna.

den kommer skriva:


aa
ab
ac...

när den gått runt kommer den skriva:

ba
bb
bc
bd....

ca
cb
cc...

da
db
dc
dd...

ni fattar vet inte riktigt hur jag ska göra för det blir många kombinationer med bara 2 platser, man måst eju göra en slags funktion vilket jag inte är så himla bra på.


tänkte att platserna som man vill att programmet ska skriva ut a-ö på får bli en 0 eller ett _ , bara så att programmet vet att där fattas en bokstav.

det ska se ut så här:

programmet frågar efter längden av ordet.

programmet frågar vad man har av ordet, vi tar till exempel apa, där vi bara har ett p.

då skriver vi antingen _p_ eller 0p0, då ska programmet göra utskrivningar av alla möjliga kombinationer på de tomma platserna. vilket blir:

apa
apb
apc
apd...

bpa
bpb
bpc...

cpa
cpb
cpc


nu borde det hela vara förståeligt? fast det kanske inte är så lätt att göra, men skulle bli enormt tacksam om någon kunde fixa det




tobbez 21:35 - 12:a Januari 2008 | Post #4
Medlem
Inlägg: 364


Skicka PM
Slash gav vägledning om precis det du frågade efter. Läs och förstå metoden han beskrev så är det inte så svårt att implementera sedan.

Kodexemplet är väl inte så bra dock, men läs beskrivningen.




Slash 23:59 - 12:a Januari 2008 | Post #5
Medlem
Inlägg: 141


Skicka PM
    Citat av tobbez:
Slash gav vägledning om precis det du frågade efter. Läs och förstå metoden han beskrev så är det inte så svårt att implementera sedan.

Kodexemplet är väl inte så bra dock, men läs beskrivningen.


Faktum var att jag provkörde algoritmen efteråt med python och det fungerade utmärkt, men om du har några synpunkter är jag glad över att lära mig din vinkel på det helaSmiley

-------------------------
Ingen sigantur!



FunkyChicken 00:45 - 13:e Januari 2008 | Post #6
Nyhetsredaktör
Inlägg: 800


Skicka PM
kommer inte detta ge
aaaa
bbbb
cccc
osv
?

Nästlade loopar borde behövas. Men det blir ju bara en rad till.





Slash 00:54 - 13:e Januari 2008 | Post #7
Medlem
Inlägg: 141


Skicka PM
    Citat av FunkyChicken:
kommer inte detta ge
aaaa
bbbb
cccc
osv
?

Nästlade loopar borde behövas. Men det blir ju bara en rad till.


Ja det är bara en vända, den måste köras flera gånger för att räkna.

  1. /* enum.cpp */
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <string>
  5. #include <iostream>
  6.  
  7. void enumerate(const char *pattern, char first, char last, char wild=''_'') {
  8.  
  9. std::string counter = pattern;
  10. bool done = false;
  11.  
  12. std::replace(counter.begin(), counter.end(), wild, first);
  13.  
  14. while (!done) {
  15. printf("%s\n", counter.c_str());
  16. for (int i = counter.size() - 1; i >= 0; i--) {
  17. if (pattern[i] != wild) {
  18. continue;
  19. } else if (counter[i] == last) {
  20. if (i == 0)
  21. done = true;
  22. else
  23. counter[i] = first;
  24. } else {
  25. counter[i]++;
  26. break;
  27. }
  28. }
  29. }
  30.  
  31. }
  32.  
  33.  
  34. int main()
  35. {
  36. enumerate("_y__", ''a'', ''z'');
  37. return 0;
  38. }


EDIT
Visade sig att jag lade till fixed chars lite för snabbt ty den inte kommer att sluta loopa om pattern[0] inte är wild. Men det är väl snabbt fixat för trådskaparen?Smiley

-------------------------
Ingen sigantur!

Senast redigerad 00:59 - 13:e Januari 2008


freddiv 12:06 - 14:e Januari 2008 | Post #8
Medlem
Inlägg: 4


Skicka PM
vill tacka alla hängivna som har hjälpt mig med detta, jag är mycket imponeradSmiley tack så mycket.

eftersom consolen inte kan visa oändligt med text undrar jag om det finns någon kod som gör så att den gör det så att man kan gå igenom texten.




FunkyChicken 12:39 - 14:e Januari 2008 | Post #9
Nyhetsredaktör
Inlägg: 800


Skicka PM
Spara till en fil?
Kör ditt program med
enum > dump.txt




Sidor: 1

Forum huvudsida -> Programmering -> c++ knäcka
Atom feed

Du får inte posta i den här tråden | Till toppen