Posun jmen – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Posun jmen – Pascal – Fórum – Programujte.comPosun jmen – Pascal – Fórum – Programujte.com

 

David
~ Anonymní uživatel
177 příspěvků
3. 5. 2011   #1
-
0
-

Zdravím všechny,
dostali jsem za úkol vytvořit program. Ale programování mi je cizí, bohužel. Jak by byl snadný život :) Obracím se na vás s dotazem, zdali by jste mi nemohli dát přibližný nástřel, jak by měl program vypadat...
Název příkladu je Posun jmen:

Vytvořte program, který naplní jednorozměrný vektor jmen A (typ string) o délce n. Dále přečtete celé číslo m. V případě kladného m proveďte cyklický posun vektoru vpravo o m pozic, pro záporné m vlevo. Cyklický posun vpravo znamená, že se neposlední prvky posunou o jeden index, poslední prvek přesune na místo prvního prvku. Posun vlevo je analogický, první prvek se stává posledním.
Vytiskněte původní i posunutý vektor.
Vstup: n, m, vektor A
Výstup: Původní i posunutý vektor.

Budu rád, za každou odpověď, která mi pomůže...vím, že čas nikdy dost..i tak děkuji za odpovědi :)

Nahlásit jako SPAM
IP: 89.102.112.–
JoDiK
~ Anonymní uživatel
987 příspěvků
4. 5. 2011   #2
-
0
-

Zkus říct po pravdě o co jde. A proč mluvíš za víc lidí "dostali jsem za úkol"? Proč ti někdo dává za úkol vytvořit program, když je ti to cizí? To jako kdyby mně někdo dal za úkol otestovat DNA na přítomnost sekvence způsobující dědičnou chorobu - taky je mi to cizí...

Nahlásit jako SPAM
IP: 88.103.236.–
Grungy0
Super člen
4. 5. 2011   #3
-
0
-

Neviem či som dobre pochopil zadanie, ale asi máš načítať pole stringov a potom to pole poprehadzovať podľa toho posunu. V podstate budeš iba posúvať indexy. Budeš maťnačítané pole A potom vytvoríš pole B s poprehadzovanými(posunutými) prvkami. Sprav si funkciu ktorá ti bude vracať prepočítaný index, teda ak je posun 2 tak z indexu 2 ti spraví 4, z indexu 3 zas vráti 5, hlavne ošetri ten prechod cez hranice intervalu. Potom už len prejdeš v cykle pole A a budeš priraďovať polu B nové indexy, čiže asi niečo takéto B[funkcia(i,posun)] := A[i]

Nahlásit jako SPAM
IP: 158.193.84.–
Prvý náznak hlúposti, je pocit geniality.
JoDiK
~ Anonymní uživatel
987 příspěvků
4. 5. 2011   #4
-
0
-

To Grungy :
Problém mnoha zadání je, že jsou nepřesná. Často se pak stane, že člověk vyplodí nějaký program a zadavatel mu ho vrátí, protože to chtěl jinak.
V tomto případě, pokud se budu držet formulace zadání: "proveďte cyklický posun vektoru vpravo o m pozic...", jde zřejmě zadavateli o to, aby si řešitel procvičil práci s polem a opravdu fyzicky přesouval ty údaje v tom jednom poli. Což ve tvém navrženém řešení nebude provedeno. Netvrdím, že je to špatné řešení, ale domnívám se, že nebude přijato. Samozřejmě se mohu také mýlit.

Nahlásit jako SPAM
IP: 88.103.236.–
Mircosoft+1
Věrný člen
4. 5. 2011   #5
-
0
-

To JoDiK : Jo, nepřesná zadání jsou na houby. Ale možná se na té škole považuje "otravujte zadavatele tak dlouho, dokud vám to neupřesní" za implicitní součást zadání a užitečný trénink pro praxi :-).

Tak jo, zkusím ten nástřel...

Máš vektor (člil pole, čili klíčové slovo Array) stringů nebo obecně čehokoli, budu tomu říkat prvky. Indexy začínají číslem 1, poslední platný prvek má index m, pravá mez pole může být cokoli >=m (u Turbo Pascalu pozor na 64kilobytový limit - kompletních stringů se ti do souvislého pole vejde maximálně 256, pak už překladač hlásí "Structure too large").

Posun doprava:
1) m. prvek si ulož někam stranou (do samostatné proměnné).
2) Cyklus pro pozici od m do 2 (budeš potřebovat slova For a Downto): prvek vlevo od aktuální pozice (tj. s indexem o 1 menším) zkopíruj na aktuální pozici.
3) Na 1. pozici zkopíruj původní m. prvek.

Doleva to bude podobné, jenom si na začátku odložíš první prvek a cyklus budeš točit od levého konce (For + To).

Posun o n prvků můžeš pro začátek vyřešit jako nkrát opakovaný posun o 1. Jestli to budeš chtít nějak optimalizovat, budeš muset použít druhé pole, jak doporučuje Grungy.

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
David
~ Anonymní uživatel
177 příspěvků
11. 5. 2011   #6
-
0
-

Zdravím všechny, děkuji za reakce...s kamarádem jsem si sednul a trochu popracoval...když jsem se byl zeptat jestli je to zprávně, tak neni. Udělal jsem to, že se šoupou jen písmena ne jména..špatně jsem to pochopil a ještě ten posun moc nefunguje. Měli by se šoupat jména např. Pepa, Karel, Jana atd. vždy o jeden index a poslední zpět na první a naopak..šlo by to nějak rychle upravit an ty jména? tady je můj program: díky

program Posun_jmen;


{$APPTYPE CONSOLE}

uses
SysUtils;
const c = 90;
var
a : array [1..c]of string;
p, h : string;
i, n, m : integer;

// zacatek programu
Begin

// zadani delky vektoru
writeln('zadejte delku vektoru (1-',c,')');
readln(n);
writeln;

// naplneni a vypsani vektoru
randomize;
for i := 1 to n do
begin
a[i] := char(random(25)+65);
write(a[i]);
end;

// posun vekotoru o "m"
writeln;
writeln;
writeln('zadejte cele cislo; zaporne posouva vektor doleva kladne doprava');
readln(m);
writeln;
m := m mod n;

if m>=0
then

// posun pro kladne "m"
begin
for i := n downto 1+m do
begin
h := a[i];
a[i] := a[i-m];
a[i-m] := h;
end
end

else
// posun o zaporne "m"
begin
m := -m;
for i := 1 to n-m do
begin
h := a[i];
a[i] := a[i+m];
a[i+m] := h;
end;
end;

// vypsani posunuteho vektoru
for i := 1 to n do
write(a[i]);

// finis
writeln;
writeln;
writeln('pro ukonceni stiskni ENTER');
readln;
end.

Nahlásit jako SPAM
IP: 89.102.247.–
JoDiK
~ Anonymní uživatel
987 příspěvků
11. 5. 2011   #7
-
0
-

Když to má zpracovávat jména, proč tam cpeš písmena?
a[i] := char(random(25)+65);
když máš posouvat po jednom cituji: "Cyklický posun vpravo znamená, že se neposlední prvky posunou o jeden index"
proč se pokušíš posouvat rovnou o m a ještě tak divně?
a[i] := a[i-m];
Zadavatel chce, abys to m-krát posunul o jedno.

Nahlásit jako SPAM
IP: 88.103.233.–
David
~ Anonymní uživatel
177 příspěvků
11. 5. 2011   #8
-
0
-

To JoDiK :
nevím :D v podstatě jsem přihlížel když tento program vznikal..ted ho potřebuju předělat na ty jména...

Nahlásit jako SPAM
IP: 89.102.247.–
Mircosoft+1
Věrný člen
16. 5. 2011   #9
-
0
-

Máš špatně ten posouvací algoritmus. Nápad s postupným vyměňováním dvojic jako při bubblesortu by sice fungovat mohl, ale máš pomotané cykly. Je potřeba použít dva: vnitřní, který projde celé pole od n do 2 nebo od 1 do n-1 (ten způsobí cyklický posun o 1), a vnější, který to celé zopakuje mkrát. V žádném případě se tam nesmí objevit nic jako 1 to n-m a podobně - n a m spolu nijak nesouvisí!

Já bych to napsal spíš takhle:

// posun o 1 doprava:

begin
h := a[n]; {ulozeni posledniho prvku stranou}
for i := n downto 2 do {predpokladam, ze pole bude mit vic nez 2 prvky!}
a[i] := a[i-1]; {postupne prekopirovani kazdeho prvku o jedno misto doprava}
a[1] := h; {vlozeni posledniho prvku na prvni pozici}
end

Ale tvůj postup bude fungovat taky, stačí opravit ty cykly. Písmena místo jmen přesouvat nebude; to se ti jenom zdálo, protože se pole místo cyklického posunu totálně zamíchalo.

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
17. 5. 2011   #10
-
0
-

Díky za reakce...
Tak jsem se obrátil trochu na programátora, který bohužel v Pascalu dělal naposledy před 10 lety :)) trochu mi s tim poradil...napsal mi vlastní algoritmus programu tak, jak by to mělo fungovat, problém je ten, že netrefil syntax pascalu, mohl by mi tady někdo pomoci přepsat do správné syntaxe? díky moc

program Project1;


{$APPTYPE CONSOLE}

uses
SysUtils;

var vektor: array[90] of String;
var posun: Integer;
var pocetJmen: Integer;
var i: Integer;

function posunNahoru(vektor, pocetJmen) {
var tmp: String;
var i: Integer;

tmp = vektor[0];
for (i =0; i< pocetJmen-1; i++) {
vektor[i] = vektor[i+1]; // posun o jednu pozici nahoru
}
vektor[pocetJmen] = tmp;
return vektor;
}

function posunDolu(vektor, pocetJmen) {
var tmp: String;
var i: Integer;

tmp = vektor[pocetJmen];
for (i =pocetJmen; i> 0; i--) {
vektor[i] = vektor[i-1]; // posun o jednu pozici dolu
vektor[0] = tmp;
return vektor;
}

if (posun>0) {
for (i=1; i<=posun; i++) {
posunNahoru(vektor)
}
}
else {
posun = abs(posun); // absolutni hodnota
for (i=1; i<=posun; i++) {
posunDolu(vektor);
}
}

Nahlásit jako SPAM
IP: 89.102.247.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #11
-
0
-

"netrefil syntax pascalu" :smile6:

pascal je to priblizne kolem radku s "var" a prvnich par ze zacatku...
zbytek je C jak poleno

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
17. 5. 2011   #12
-
0
-

Asi ano...:/ přeci jenom se pohybuje na vysoké úrovni...udělal mi nástřel algoritmu, jen bych ho teď potřeboval přepsat do syntaxu pascalu...:(...nemohl by mu tady někdo hodný pomoci...prosím

Nahlásit jako SPAM
IP: 89.102.247.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #13
-
0
-

To Anonymní uživatel : a co si takhle prohlidnout syntaxi pascalu, syntaxi C a udelat si to sam?

Je tu kazdej den 20 lidi co nejsou schopni udelat ani takhle jednoduchou vec (nekteri sou na tom jeste hur)
A je to samozrejme otravny tu cist furt to samy: tak sem tady - posadte se na prdel a udelejte mi to a to (+ prosim, smutne koukam, zivit se tim nechci - je to jen do skoly... bla bla bla)
(divim se ze nervak jeste drzi :D - ikdyz me to taky par let vydrzelo)

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
David
~ Anonymní uživatel
177 příspěvků
17. 5. 2011   #14
-
0
-

To KIIV :
OK beru na vědomí...jen jsem myslel, že by mi tu někdo mohl pomoci...promiňte, že jsem otravoval...

Nahlásit jako SPAM
IP: 89.102.247.–
Mircosoft+1
Věrný člen
18. 5. 2011   #15
-
0
-

No, ono mezi "pomoci" a "udělat to za mě" je docela rozdíl ;-). Nejdřív ses nás zeptal, jak na to. Podrobně jsme ti popsali postup. Pak sis to nechal napsat od jednoho kamaráda, jenže to tak docela nefungovalo. Zeptal ses proč. Řekli jsme ti, co je špatně a jak to opravit. Pak sis to nechal napsat od jiného kamaráda, jenže to zase nefunguje. Když ti teď poradíme, co kde přepsat, zajdeš za třetím kamarádem, nebo se nad tím konečně trochu zamyslíš?

Všechno, co potřebuješ k úspěšnému vyřešení, najdeš v tomhle vlákně. Je to tvoje škola a tvoje známky, ne naše.

Neboj, ono to půjde. Stačí chtít.

Nahlásit jako SPAM
IP: 208.232.182.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Posun Jmen — založil Radek

Trideni jmen — založil Lukáš

Seznam jmen vytvořený polem — založil peaceman

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý