Pomôžte s programom v C

Programovacie jazyky, rady, poradňa...
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Pomôžte s programom v C

Príspevok od používateľa dimo41 »

Pomôžte s programom v C
pred tým sa zadá ešte číslo s klávesnici
while (n!=0){
printf("%d",n%2);
n=n/2;
}
toto mi ma s 10 sústavy pretransformovať do binárnej problém je v tom že mi to píše naopak teda musím to čítať odzadu ako to spravím aby to vypisovalo odpredu ?
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: Pomôžte s programom v C

Príspevok od používateľa Spixy »

Kód: Vybrať všetko

int a=0, pole[32];
while (n!=0) {
  pole[a]=n%2;
  n=n/2;
  a++;
}
for (int i=a; i>=0; i--) printf("%d",pole[i]);
// opravené
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Napríklad tak, že to budeš ukladať do pola a potom ho vypíšeš odzadu

//autoeditácia príspevku (04 Nov 2012, 23:42)
Spixy celé zle, takto radšej nie.
Po prvé, nultý index ti trochu uteká, čo nie je v C úplne kó-šér (nevadí to, ale nie je to pekné)
Po druhé, int má typicky 32 bitov, takže viac ich nedostane. Na čo si teda robíš pole na 100?
Baseilos
Light Expert
Light Expert
Príspevky: 57
Registrovaný: 01 máj 2011, 2:15

Re: Pomôžte s programom v C

Príspevok od používateľa Baseilos »

Kód: Vybrať všetko

void convertToBinary(int number) {
   if (n / 2 > 0) 
      convertToBinary(n / 2);
   printf("%d", n%2);
}
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

a aku knižnicu mam použiť vypisuje mi asi toto :error C2601: 'convertToBinary' : local function definitions are illegal
#include "stdio.h"
int main()
{
int n;
printf ("cislo");
scanf("%d",&n);
void convertToBinary(int number) {
if (n / 2 > 0)
convertToBinary(n / 2);
printf("%d", n%2);
}
return 0;
}
takto som to napísal
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Presne pre toto som tú rekurziu ani nespomínal. Zabudni na to, uprav svoj kód tak, aby si to dával do pola a pracuj s ním.

(Na funkcie a na nejakú rekurziu ešte chvíľu nemysli)
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

ale ja to skúšam podla toho čo je višie napísane ale neviem kde mam chybu ale vypisuje mi blbosty napr. pre ten to program pre číslo 12 by malo vipisat 1100 ale vypisuje -8589934601100 ??? a neviem prečo
#include "stdio.h"
int main()
{
int n, a=0, pole[32],c;
printf ("cislo");
scanf("%d",&n);

while (n!=0) {
c=n%2;
pole[a]=c;
n=n/2;
a++;
}
for (int i=a; i>=0; i--) printf("%d",pole);

return 0;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

To preto, že vypisuješ jeden index naviac a vypíše ti nejaký nezmysel, ktorý na tom mieste náhodou je :)
Pri výpise má i ísť predsa od a-1 (to kvôli tomu, že pole indexuješ od nuly)

A používaj, prosím, na zdrojáky tag
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

keď som dal a=1 tak mi vípisalo tu blbosť dva krát :D
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Zle som sa vyjadril - to je preto, že sa v C pole indexuje od nuly. To, že mu tam teraz podstrčíš index iný to nevyrieši - nultý index ostane nevyužitý a premenná a bude na tom rovnako (len o jedničku vyššia), takže ti aj tú prvú hlúposť vypíše.

a nechaj na nule, potom vykonáš cyklus while (pre 12ku bude mať premenná a za cyklom hodnotu 4, pretože 4 krát uložíš číslo do pola(0,1,2,3) a nakoniec ju ešte raz zvýšiš)
no a na koniec to vypíšeš tak, že i musí ísť od nula do tri(!!!) (pretože 0,1,2,3 = 4 prvky)
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

vzdávam to do 24:00 som sa pokušal to oživiť ale nepodarilo sa, bude to písať odzadu

//autoeditácia príspevku (06 Nov 2012, 0:00)
#include "stdio.h" asi takto vypada ten program ale aj tak nejde
int main()
{
int n, a=0, nums[32],i;
printf ("cislo");
scanf("%d",&n);
;
for(i=0;n!=0;i++){
nums=n%2;
n=n/2;
}
a=i+1;
for (a;a>0;a--){
printf("%d",nums);
}

return 0;
}

//autoeditácia príspevku (06 Nov 2012, 0:22)
ok ďakujem za pomoc mam to :D
while(n!=0){
rem = n % 2;
sum = sum + ( i * rem );
n = n / 2;
i = i * 10;

}
printf("%d",sum);
asi takto :D
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Uau, koľko si toho povymýšľal. Pritom tvoj kód stačilo trošku upraviť

Kód: Vybrať všetko

#include "stdio.h"
int main()
{
int n, a=0, pole[32],c;
printf ("cislo");
scanf("%d",&n);

while (n!=0) {
c=n%2;
pole[a]=c;
n=n/2;
a++;
}
for (int i=a-1; i>=0; i--) printf("%d",pole[i]);

return 0;
}
Ale to druhé riešenie je celkom zaujímavé.
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

ale mam ďalšiu otázku prečo v tomto programe mi vypíše ten printf keď zadám zlý znak 2x?
for (;1;){
a=getchar();
if(a!='b'&&a!='p'&&a!='s'){
printf("nemozme vykonat operaciu zadajte spravny znak\n");
continue;
}
break;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Pretože na vstup okrem jedného znaku vždy zadáš znaky dva - a síce daný znak a enter. Najprv sa teda zo vstupu zoberie tvoj zadaný znak, vyhodnotí sa podmienka a ak je znak zlý, cyklus ide od znovu. Tu funkcia getchar zoberie to, čo má na vstupe a tam má enter. Tak ho použije a ide to celé znovu.
Riešenie? Napr. pred continue pridaj ešte jeden prázdny getchar, ktorý zožerie ten enter. Príp. sa pozri na funkciu fflush();

a btw. neckonečný for stačí napísať ako for(;;) { }, ale častejšie sa používa while(1) { } (z čisto estetických dôvodov)
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

tak toto ma dostalo kto vie ako to spraviť alebo skôr návod naprogramujem si to sam aspoň sa to naučim
Prílohy
uloha13.jpg
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

Pre guruov je to preto, že na to máš prísť sám. Tak sa to naučíš najlepšie.
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

:D ale to som zabudol dať preč ale ja to nechcem naprogramovať len poradiť štvorec si spravim aj sam ale ako docielim tu medzeru v strede
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Pomôžte s programom v C

Príspevok od používateľa BX »

No napríklad tak, že tam vypíšeš medzeru :)
dimo41
Amateur
Amateur
Príspevky: 14
Registrovaný: 04 nov 2012, 23:01

Re: Pomôžte s programom v C

Príspevok od používateľa dimo41 »

super som mudrejši hneď

//autoeditácia príspevku (11 Nov 2012, 22:20)
a nejaká normálnejšia rada? :(
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: Pomôžte s programom v C

Príspevok od používateľa Viper »

no jednoducho hore/dole to od riadkuješ a na bokoch len medzeru co je na tom ťažké
Napísať odpoveď