[ Koka18 @ 04.12.2018. 19:07 ] @
Postovani, moze li mi netko rijesiti zadatak. Hvala unaprijed :)
https://imgur.com/a/UBtEci5
[ mjanjic @ 04.12.2018. 23:30 ] @
Malo je nezgodno, ako je broj reči u stringu prost, onda string ostaje u jednom redu, ali se može dodati uslov za takav ispis ako je dužina niza koji sadrži faktore broja slova u stringu jednaka 1 (broj je deljiv samo sa 1 i sa samim sobom), međutim tada se i petlja za ispis izvršava praktično samo jednom, tako da je to nepotrebno.


Valjda je to to ;)
https://jsfiddle.net/k7g2edvp/

NAMERNO sam ostavio jednu logičku grešku (probati string dužine kvadrata prirodnog broja, npr. 16), jer sad ne mogu da je ispravim na jsfiddle, a ti pokušaj da je otkriješ i ispraviš :)




A sad lepo prevedi ovo u C++ :)
Ako ne znaš dovoljno C++ da ovo prevedeš (naravno, može se raditi sa klasama i sl., ali praktično nema potrebe za tim), nemoj ni da pitaš da ti radimo zadatak, jer je to besmisleno. Ja sam uradio u JS; jer mi baš trebaju ovakvi i slični primeri ^_^



Evo koda za one koje mrzi da se petljaju sa jsfiddle (sve je u HTML fajlu zbog jednostavnosti, ako se JS izmesti u eksterni fajl, "malo" drugačije ide sa učitavanjem pa da ne komplikujemo ovde sa tim):

Code:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Primer transformacije stringa</title>
    <style>
        * {
            box-sizing: border-box;
        }
        #txtTransformed {
            display:inline-block;
            border: darkgray 1px inset;
            min-height: 50px;
            min-width: 150px;
            padding: 5px;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function(event) {
        document.getElementById("btnTransform").addEventListener("click", txtTransformer);
        document.getElementById("btnClear").addEventListener("click", txtClear);
        });

        function txtTransformer() {
            var txtInput = document.getElementById("txtInput").value;
            var txtInputLength = txtInput.length;
            var txtTransformed = document.getElementById("txtTransformed");
            txtTransformed.innerHTML = "";
            var txtInputLengthFactors = [1];
            for (let i = 2; i <= Math.sqrt(txtInputLength); i++) {
                if (txtInputLength % i == 0) {
                    txtInputLengthFactors.push(i);
                }
            }
            var numberOfRows = Math.max(...txtInputLengthFactors);
            var numberOfColumns = txtInputLength / numberOfRows;
            for (let i = 0, reversed = false; i < numberOfRows; i++) {
                if (!reversed) {
                    txtTransformed.innerHTML += txtInput.substring(numberOfColumns * i, numberOfColumns * (i+1)) + "<br>";
                    reversed = true;
                } else {
                    txtTransformed.innerHTML += txtInput.substring(numberOfColumns * i, numberOfColumns * (i+1)).split("").reverse().join("") + "<br>";
                    reversed = false;
                }
            }
        }
        function txtClear() {
            document.getElementById("txtTransformed").innerHTML = "";
        }

    </script>
</head>

<body>
    <h1>Primer transformacije stringa</h1>
    <form>
        <textarea id="txtInput" columns="20" rows="5" placeholder="Unesite reč dužine 3-100 karaktera."></textarea>
    </form>

    <button id="btnTransform">
        Transformiši tekst!
    </button> <button id="btnClear">
            Izbriši!
        </button>

    <div>
        Rezultat:
    </div>
    <div id="txtTransformed">
    </div>
</body>

</html>


[Ovu poruku je menjao mjanjic dana 05.12.2018. u 00:52 GMT+1]

[Ovu poruku je menjao mjanjic dana 05.12.2018. u 00:53 GMT+1]
[ Branimir Maksimovic @ 05.12.2018. 06:18 ] @
Treba da nadjes 2 najveca broja pomnozena iz faktora duzine stringa. Moze brute force metod. Odredjivanje faktora ti takodje nije bas najbolje.
[ jablan @ 05.12.2018. 09:22 ] @
Evo Ruby :P

Code:

s = gets
n = s.length
rowlen = Math.sqrt(n).floor.downto(1).find{|i| n % i == 0}
s.chars.each_slice(rowlen).with_index{ |chars, row|
  puts(row.even? ? chars.join : chars.join.reverse)
}


@mjanjic: ne moraš iterirati kroz sve brojeve od 2 do sqrt(len), pa onda tražiti maksimum, dovoljno je da iteriraš od sqrt(len) naniže, i nađeš prvi koji zadovoljava kriterijum.

[Ovu poruku je menjao jablan dana 05.12.2018. u 10:34 GMT+1]
[ mjanjic @ 05.12.2018. 10:27 ] @
Da, ima prostora za optimizaciju, hvala na sugestiji. Mada, kad je broj karaktera prost, onda će opet da radi iteraciju sve do jedinice, tako da ne može algoritam biti idealan u svim slučajevima.
Ali nisam baš nešto inspirisan za to u 1 ujutru, možda kad bih kasnije gledao kod... ipak se svi učimo na svojim i tuđim greškama i/ili na tuđim dobrim primerima.
[ Bradzorf012 @ 05.12.2018. 16:11 ] @
Moguće je da nisam dobro razumeo zadatak. Nije mi jasno zašto u onom drugom primeru(ropotarnica) izlaz nije:

ropo
nrat
ica

nego prosto ropotarnica? Pažljivo sam pročitao zadatak.
[ jablan @ 05.12.2018. 16:16 ] @
"ukupan broj polja [matrice] je jednak dužini reči"

U tvom slučaju matrica ima 4x3=12 polja a reč ima 11 slova.
[ Bradzorf012 @ 05.12.2018. 17:20 ] @
Jesam glupson.