Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Výpis

Aktivity
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:8.12.2016 13:11

Zdravím, chtěl bych poradit s něčím víceméně lehkým :D

Jde o to, že na vstup bych chtěl zadat např: abc, tak to není problém, že jop? Použiji getchar, abych získal acii hodnotu znaku.

na výstupu bych chtěl něco jako:
abc
acb
bac
bca
cab
cba
.. prostě kombinace podle ascii, myslel jsem, že by to mohlo jít třeba přes for cyklus, nebo tak, ale nevím, jak posouvat ty písmena :D Poradí mi někdo prosím? :)

 
Odpovědět
8.12.2016 13:11
Avatar
Odpovídá na Josef Vondra
Erik Šťastný:8.12.2016 13:14

Jsem jediný kdo absolutně nechápe co chceš? :D

Chceš posouvat znaky, ale do toho pleteš ascii hodnoty, vůbec nevím proč :-O

 
Nahoru Odpovědět
8.12.2016 13:14
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Josef Vondra
Martin Dráb:8.12.2016 13:24

Asi myslíš něco jako kód níže. Není to zrovna hezky napsané, protože na permutace (a ty zřejmě potřebuješ na výstup dát všechny permutace tří vstupních znaků) jsem nikdy moc nebyl.

char abc[3];

abc[0] = getchar();
abc[1] = getchar();
abc[2] = getchar();
for (size_t i = 0; i < 3; ++i) {
  putchar(abc[i]);
  for (size_t j = 0; j < 3; ++j) {
    if (i == j)
      continue;

    putchar(abc[j]);
    for (size_t k = 0; k < 3; ++k) {
      if (k == i || k == j)
        continue;

      putchar(abc[k]);
    }
  }

  printf("\n");
}
Editováno 8.12.2016 13:24
Nahoru Odpovědět
8.12.2016 13:24
2 + 2 = 5 for extremely large values of 2
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:8.12.2016 13:37

Mno, myslím to tak, že zadám například:
abc
a na výstupu toho kódu bude:
abc
acb
bac
bca
cab
cba

Nebo, když zadám:
1Ab
tak chci, aby na výstupu bylo:
1Ab
1bA
A1b
Ab1
b1A
bA1

Už chápete, co chci říct? :D :)

 
Nahoru Odpovědět
8.12.2016 13:37
Avatar
Odpovídá na Josef Vondra
Erik Šťastný:8.12.2016 13:49
// C program to print all permutations with duplicates allowed
#include <stdio.h>
#include <string.h>

/* Function to swap values at two pointers */
void swap(char *x, char *y)
{
        char temp;
        temp = *x;
        *x = *y;
        *y = temp;
}

/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */
void permute(char *a, int l, int r)
{
int i;
if (l == r)
        printf("%s\n", a);
else
{
        for (i = l; i <= r; i++)
        {
                swap((a+l), (a+i));
                permute(a, l+1, r);
                swap((a+l), (a+i)); //backtrack
        }
}
}

/* Driver program to test above functions */
int main()
{
        char str[] = "1Ab";
        int n = strlen(str);
        permute(str, 0, n-1);
        return 0;
}

Source

 
Nahoru Odpovědět
8.12.2016 13:49
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:8.12.2016 14:50

To je sice fajn, ale někde tam je něco jinak, než bych potřeboval :D Pro jakoukoliv délku strinku to otočí poslední dvě hodnoty :D

místo:
1Ab
1bA
A1b
Ab1
b1A
bA1

to změní na konci na :
1Ab
1bA
A1b
Ab1
bA1
b1A

:/ :)

 
Nahoru Odpovědět
8.12.2016 14:50
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:8.12.2016 15:42

Už jsem na to asi přišel, ale hodila by se pomoc :D
Vlastně mám udělat permutaci s rekurzí .. ale pořád mi něco uniká, protože to otáčí ten konec, viz: příspěvek výše ?:(

 
Nahoru Odpovědět
8.12.2016 15:42
Avatar
Odpovídá na Josef Vondra
Erik Šťastný:8.12.2016 15:48

Bude nejspíš tím, že to co jsem poslal prostě vypíše všechny permutace a ignoruje to jak je chceš nebo nechceš seřadit :)

 
Nahoru Odpovědět
8.12.2016 15:48
Avatar
Nahoru Odpovědět
8.12.2016 15:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:8.12.2016 15:58

A jak bych docílil toho, aby je to seřadilo tak, jak chci? :)

A ještě jedna věc, potřeboval bych, aby to bralo jen znaky 0-9 A-Z a-z, když by se tam objevilo něco jiného, tak by to napsalo na výstup třeba "Chyba" .. To samé, pokud bych nic nezadal a dal jenom Enter :)

 
Nahoru Odpovědět
8.12.2016 15:58
Avatar
Odpovídá na Josef Vondra
Erik Šťastný:8.12.2016 16:01

Achjo... Nebudeme ti tady ten domácí úkol dělat kompletně celý kód na který dáš jen Ctrl-C Ctrl-V. Jestli máš zájem nedávno jsem tu postoval, že moje přítelkyně Vám ráda udělá domácí úkoly za peníze :D

Co například to co vyplivne ta metoda co jsem poslal uložit do nějakého pole na které pak použiješ nějaký Sort?

Ty znaky můžeš kontrolovat hnedka na vstupu

 
Nahoru Odpovědět
8.12.2016 16:01
Avatar
Odpovídá na Josef Vondra
Libor Šimo (libcosenior):8.12.2016 16:02

Kamarade to uz prehanas. Mas hotovy program a drobnosti si nechces riesit sam. Domace ulohy su pre toho, kto ich dostane.

Nahoru Odpovědět
8.12.2016 16:02
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.