Beginner in C - Obrácení Pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Beginner in C - Obrácení Pole – C / C++ – Fórum – Programujte.comBeginner in C - Obrácení Pole – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
17. 11. 2014   #1
-
0
-

Ahojte, mám problém s jednoduchým prográmkem...mám vytvořit pole např od 0 po 10 s tím na výstupu mi to vypíše dané pole a zároven pole obráceně to jest od 10 po 0 ... napsal jsem to nějak takhle... 

 #include <stdio.h>
 #include <string.h>
 #define poc 15
 int main()
 {
  int pole[poc];
  int i;

  printf("znaky z pole: ");

  for(i=0;i<=poc;i++){
     printf("%i ",pole[poc]);
 }
  printf("\nobracene znaky: ");

 for(i=poc;i>=0;i--){
     printf("%i ",pole[poc]);
 }

  return 0;
 }

ale muj profesor mi na to napsal tenhle mail ... " s tím obrácením pole jste to bohužel zatím asi nepochopil. Jde o to, že přímo v paměti pole je potřeba prohodit první a poslední prvek, druhý a předposlední prvek, třetí a předposlední prvek atd. Aby se při další práci s polem již pracovalo s hodnotami ve změněném pořadí, bez ohledu na to jak nebo v jakém cyklu je použijete. Prostě po vás chci, abyste provedl v poli tu úpravu pořadí natrvalo..."

Vím že se tu něco podobného řešilo také jsem se to snažil udělat podle toho ale i na podruhé se to profesorovi nelíbilo, proto prosím o radu, napadlo mě použít bubble sort ale moc si s tím nevím rady??

Díky za odpovědi budu Vám zavázán!  [:))]

Nahlásit jako SPAM
IP: 90.181.81.–
ingiraxo+15
Grafoman
17. 11. 2014   #2
-
0
-

#1 peacheass
přesně ti napsal co po tobě chce :)

takže představme si třeba slobo "ahoj".. v paměti je to jako pole 5 znaků, kde poslední je ukončovací, ten nás zajímat nemusí, takže: 

// takto vypadá nase slovo
pole[0] = 'a'
pole[1] = 'h'
pole[2] = 'o'
pole[3] = 'j'
pole[4] = '\0'

// chce po tobě, aby si to otočil na
pole[0] = 'j'
pole[1] = 'o'
pole[2] = 'h'
pole[3] = 'a'
pole[4] = '\0'

// pote vzdy po vypsani slova bude "joha"

Jednoduše při úpravě pole, projdes pulku pole a prohodíš vždy první a poslední +-1 (první+i) a (poslední-i-1)

Ted to zkus.. ;-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
17. 11. 2014   #3
-
0
-

#2 ingiraxo

No asi jsem blbec, ale pokud to chápu dobře tak to je ta funkce bubble sort ...ja jsi to napsal? :) Jinak v úkolu je psáno že ''Není dovoleno použití druhého pole, ani znovunaplnění pole hodnotami v opačném pořadí. Část zdrojového kódu, která zaměňuje pořadí prvků v poli, musí být zcela nezávislá na tom, jakými hodnotami bylo pole původně naplněno.''

Nahlásit jako SPAM
IP: 90.181.81.–
Řešení
ingiraxo+15
Grafoman
17. 11. 2014   #4
-
0
-
Vyřešeno Nejlepší odpověď

#3 peacheass
ne.. žádný buble ani jiný sortování po tobě nechce... v zadání nic o řazení není, máš to jen otočit, kdyby to bylo pole znaků, tak jak to uděláš? taky přes buble? :-)

to, že to je pole ti umožnuje to upravit přímo v něm, takže pokud prvky přeházíš tak tak zůstanou 

Jednoduchá funkce, která otočí pořadí prvků

template <typename T> void reverse(T* a, const int l)
{
    for (int i = 0; i < l / 2; i++) {
        T* t = a + i;
        *(a + i) = *(a + l - i - 1);
        *(a + l - i - 1) = *t;
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
17. 11. 2014   #5
-
0
-

#4 ingiraxo

díky moc za radu už mi to došlo! :-)

Nahlásit jako SPAM
IP: 90.181.81.–
ondrej39+1
Věrný člen
18. 11. 2014   #6
-
0
-

A je opravdu nutný to otáčet? Není lepší si přes sizeof zjistit velikost pole, tu následně použít při druhém tisku akorát tisknout od nejvyššího prvku po nejmenší, tedy 

int posl = sizeof(pole) / sizeof(char)

for(int i = posl-1; posl >=0; posl--)
cout << pole[i] << "; ";

? Ušetříš tím operaci.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
KIIV
~ Moderátor
+43
God of flame
18. 11. 2014   #7
-
0
-

#6 ondrej39
cituji z prvniho prispevku:

ale muj profesor mi na to napsal tenhle mail ... " s tím obrácením pole jste to bohužel zatím asi nepochopil. Jde o to, že přímo v paměti pole je potřeba prohodit první a poslední prvek, druhý a předposlední prvek, třetí a předposlední prvek atd. Aby se při další práci s polem již pracovalo s hodnotami ve změněném pořadí, bez ohledu na to jak nebo v jakém cyklu je použijete. Prostě po
vás chci, abyste provedl v poli tu úpravu pořadí natrvalo..."

takze by to nestacilo

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
18. 11. 2014   #8
-
0
-

#7 KIIV
Já jsem blbec, sorry. Jsem to jen přeběhl očima.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
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, 111 hostů

Podobná vlákna

Obraceni pole — založil Selfer

Hardware- Beginner — založil fixa

ASP.NET beginner's SOS — založil Hoffik

Obraceni retezce — založil Laker

Obrácení posloupnosti — založil to_jsem_ja

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ý