IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @273
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Bežme spolu a pomôžme deťom.

Príďte si zabehnúť s ČSOB nadáciou 2.6. od 10tej na Partizánsku lúku v BA. www.csobnadacia.sk

Myslite s nami ekologicky

Zapojte sa súťaže s Orangeom a vyhrajte zeleň pre vaše mesto či obec! www.orange.sk

SunSoft e-shop

Kompletný sortiment výpočtovej techniky. Tisíce položiek za výhodnú cenu. shop.sunsoft.sk

Priprav sa na futbalové EURO

Exkluzívna súťaž o Ford Fiesta! Kurzová superponuka a bonus 100€ https://www.tipsport.sk

Našiel som spôsob bieliť zuby

Podarilo sa mi vybieliť si zuby bez drahých procedúr u zubára. www.zuzaninblog.com

Zmena char na int

Zaslať odpoveď
AutorSpráva
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Št 02.02.12 19:58Odpovedať s citátomNávrat hore

Mám za úlohu: Vstupom je reťazec a pole celých čísel. Funkcia vypisuje reťazec znak po znaku, pričom ak natrafí na znak '*', vypíše nasledujúci znak (môže byť aj '*') toľkokrát, aké číslo nasleduje v poli.

Mám ten problém, že keď chcem hodnotu z poľa priradiť do premennej pom, tak mi nepriradí jej číselnú hodnotu, ale jej ASCII hodnotu. Nechápem prečo, keďže tam mám int

kód:
void vypis_retazca_nasobkom_pola(char retazec[], int pole[], int dlzka_retazca, int dlzka_pola)
{
   int i, j = 0, k;
   int pom;

   for(i = 0; i < dlzka_retazca; i++)
   {
      if(retazec[i] == '*')
      {
         if(pole[j] <= dlzka_pola) //zacne sa pole odznova
            j = 0;

         pom = pole[j];
         for(k = 0; k < pom; k++)
            putchar(retazec[i + 1]);
         i++;
         j++;
      }
      putchar(retazec[i]);
   }
}

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Št 02.02.12 20:22Odpovedať s citátomNávrat hore

Tuto cast:
kód:
if(pole[j] <= dlzka_pola) //zacne sa pole odznova
     j = 0;

si nemyslel nahodou takto:
kód:
if( j >= dlzka_pola) //zacne sa pole odznova
     j = 0;

???

Po dalsie, neviem isto, ale ja chapem zadanie tak, ze nasledujuci znak sa ma vypisat x-krat, nie x-krat + 1, ako to mas ty. Cize si este mozes upravit cyklus:
kód:
for(k = 0; k < pom; k++)

napriklad takto:
kód:
for(k = 1; k < pom; k++)
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Št 02.02.12 22:11Odpovedať s citátomNávrat hore

To su zatial len malickosti, s ktorými som sa ešte nezaoberal. Každý program si krokujem, tak by som nato došiel. To if som tam doplnil len teraz a hej, máš pravdu, takto by to robilo vkuse zacinalo na prvom prvku v poli. A aj to k má byť od 0. Ale ako vravím, stýmto som sa netrápil zatial, bolo to písané v rýchlosti. Problém mi robí to čo som napísal hore. Do premennej pom sa mi neuloži hodnota prvku ale ascii hodnota. To si mi zabudol poradiť

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Št 02.02.12 22:19Odpovedať s citátomNávrat hore

Tak ja som si to skusil a ak to mas tak, ako som to upravil, funguje to spravne. Zalezi teda, ake pole predavas funkcii. Pre ilustraciu, moj priklad vyzeral takto:
kód:
#include <stdio.h>
#include <string.h>


void vypis_retazca_nasobkom_pola(char retazec[], int pole[], int dlzka_retazca, int dlzka_pola)
{
   int i, j = 0, k;
   int pom;

   for(i = 0; i < dlzka_retazca; i++)
   {
      if(retazec[i] == '*')
      {
         if( j >= dlzka_pola) //zacne sa pole odznova
            j = 0;

         pom = pole[j];
         for(k = 1; k < pom; k++)
            putchar(retazec[i + 1]);
         i++;
         j++;
      }
      putchar(retazec[i]);
   }
}




int main()
{

    char s[] = "skus*ka vypisov*ania tex*tu";
    int p[] = { 3, 5, 2 };        /* moje pole, ktore davam funkcii ako argument */
    vypis_retazca_nasobkom_pola( s, p, strlen( s ), 3 );

    putchar( '\n' );
    return 0;

}


Vypis:
citácia:
skuskkka vypisovaaaaania texttu


Je mozne, ze nejakym sposobom nespravne zadavas pole.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Št 02.02.12 23:39Odpovedať s citátomNávrat hore

Program ide, len mi zobere zlú hodnotu. Tu mám funkciu načítavania

kód:
int nacitanie_cisiel_v_poli(int pole[])
{
   int i;
   int pom;
   int pocet = 0;

   for(i= 0; i < max; i++)
   {
      pom = getchar();
      if(pom == '\n')
         break;
      pole[i] = pom;
      pocet++;
   }
   return pocet;
}

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Št 02.02.12 23:51Odpovedať s citátomNávrat hore

Cize ty touto funkciou nacitavas cisla do premennej pole? Preto tie ASCII hodnoty. Totizto getchar() vracia ASCII hodnoty znaku nacitaneho zo vstupu. Darmo ty napises cislo, stale sa jedna o znak. Mozes ho treda prekonvertovat takto jednoducho, bez pouzitia nejakych externych funkcii:
kód:
pom = getchar();
pom -= 0x30;
if ( ( pom > 9 ) || ( pom < 0 ) )
    /* osetrit na nespravny vstup */
    break;


0x30 je hexa vyjadrenie znaku '0'. Ak teda zadas povedzme cislo '5', jeho ascii v hexa sustave je 0x35. 0x35 - 0x30 je 0x05. Cize dostal si zo znaku '5' ciselnu hodnotu 5. Teraz by ti to malo fungovat spravne.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
street_punk
Užívateľ
Užívateľ

Založený: 09.04.2011
Príspevky: 237
Bydlisko: Kesa
Vek: 22

PríspevokZaslal: Pi 03.02.12 0:18Odpovedať s citátomNávrat hore

Aha, díky. Tieto súvislosti programovania a sústav budeme preberat až teraz v lete. Takže ten môj if je tam zbitočný, nahradím ho tým tvojím.

_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd