Pitanje za C++

Funkcija itoa, konverzija integera u char, tako ces imati manipulaciju sa svakom jedinicom u broju preo chara, ako trebaju dalje da se vrse neke operacije sa njima, ponovo ih vratis u integer, al' ooga puta kako ti odgovara (jedan po jedan) itd..
 
Rastavis ga u neki char buffer, char buffer[3] (1000 ti netreba), i onda lijepo preko funkcije itoa konvertujes u for petlji for(int i = 0; i < 1000; i++), i u karaktere (buffer, zatim broj, po broj preneses u neki recimo int buffer i ides jednostavnom if petljom provjeru dali je zadnji dva puta veci i ako jeste cout << i << "\n";
 
Lepota svega je shto nemorash da koristish nikakav buffer ili da se zezash sa char nizovima vecc koristish obichno deljenje. Evo ga zadatak:

Kod:
#include <iostream>
using namesapce std;
int main () {

	int pom, zadnja, prva=0;

	for(int i=1; i<1000; i++){
		pom = i;
		zadnja = pom % 10;
		pom /= 10;
		while(pom){
			prva = pom;
			pom/=10;
		}
		if ( prva > zadnja * 2 ) cout << i << endl;
	}
        return 0;
}

pozdrav
 
_Doctor_:
Lepota svega je shto nemorash da koristish nikakav buffer ili da se zezash sa char nizovima vecc koristish obichno deljenje. Evo ga zadatak:

Kod:
#include <iostream>
using namesapce std;
int main () {

	int pom, zadnja, prva=0;

	for(int i=1; i<1000; i++){
		pom = i;
		zadnja = pom % 10;
		pom /= 10;
		while(pom){
			prva = pom;
			pom/=10;
		}
		if ( prva > zadnja * 2 ) cout << i << endl;
	}
        return 0;
}

pozdrav


ali , ne znas koliko cifara ima broj
 
_Doctor_:
Lepota svega je shto nemorash da koristish nikakav buffer ili da se zezash sa char nizovima vecc koristish obichno deljenje. Evo ga zadatak:

Kod:
#include <iostream>
using namesapce std;
int main () {

	int pom, zadnja, prva=0;

	for(int i=1; i<1000; i++){
		pom = i;
		zadnja = pom % 10;
		pom /= 10;
		while(pom){
			prva = pom;
			pom/=10;
		}
		if ( prva > zadnja * 2 ) cout << i << endl;
	}
        return 0;
}

pozdrav
Neznam jesi li kompajlirao ovaj kod, al' uglavnom nije tacan, kompajliraj pa ces se i sam uvjeriti, dobit ces neke potpuno druge brojeve, koje zadatak ne trazi.
A evo odvojio sam vrijeme i odradio zadatak bez koriscenja char-a
Kod:
#include <iostream>
using namespace std;
int main () 
{
int broj = 0, djelilac = 0;
for(int i = 1; i < 1000; i++)
{
if(((i % 10) == 0) && (( (i/2) % 2)== 0) && (i < 100))
{
djelilac = i / 20;
cout << i + djelilac << "\n";
}
if(((i % 100) == 0) && (( (i/20) % 2)== 0) && (i >= 100))
{
djelilac = (i / 20)/10;
cout << i + djelilac << "\n";
}
}
}
 
Sucur:
Neznam jesi li kompajlirao ovaj kod, al' uglavnom nije tacan, kompajliraj pa ces se i sam uvjeriti, dobit ces neke potpuno druge brojeve, koje zadatak ne trazi.
A evo odvojio sam vrijeme i odradio zadatak bez koriscenja char-a
Kod:
#include <iostream>
using namespace std;
int main () 
{
int broj = 0, djelilac = 0;
for(int i = 1; i < 1000; i++)
{
if(((i % 10) == 0) && (( (i/2) % 2)== 0) && (i < 100))
{
djelilac = i / 20;
cout << i + djelilac << "\n";
}
if(((i % 100) == 0) && (( (i/20) % 2)== 0) && (i >= 100))
{
djelilac = (i / 20)/10;
cout << i + djelilac << "\n";
}
}
}
Sucure, ovaj kod bash i ne radi, ne ispisuje sve brojeve. Evo nechega shto sam ja sklepao na osnovu Doctorovog koda
Kod:
#include <iostream.h>

int main () 
{

int zadnja, prva;

for(int i=0; i<1000; i++)
{
  if (i > 0 && i < 100)
  {
    zadnja = i % 10;
    prva = i / 10;

  
    
  }
  if (i > 100 && i < 1000)
  {
    zadnja = i % 10;
    prva = i / 100;
    
  
    
  }
  if ( prva == zadnja * 2)
  cout << i << endl;
}
system ("PAUSE");
        return 0;
}
Poz. ;)
 
Ljudi u pravu ste prevideo sam jednu stvar, code je ispisvao sve brojeve koji gde je prva cifra dva puta vecca ili vishe od poslednje. Tako da samo treba promeniti uslov kod ispisa na == umesto >

Kod:
#include <iostream>
using namesapce std;
int main () {

	int pom, zadnja, prva=0;

	for(int i=1; i<1000; i++){
		pom = i;
		zadnja = pom % 10;
		pom /= 10;
		while(pom){
			prva = pom;
			pom/=10;
		}
		if ( prva == zadnja * 2 ) cout << i << endl;
	}
        return 0;
}

pozdrav
 
E sad kad sam pogledao tvoj _doctor_ kod vidio sam da sam i ja napravio propust, al' evo ispravljen je sada:
Kod:
#include <iostream>
using namespace std;
int main () 
{
int moduo = 0, mod1 = 0, djelilac = 0;
for(int i = 1; i < 1000; i++)
{
if(((i % 10) == 0) && (( (i/2) % 2)== 0) && (i < 100))
{
djelilac = i / 20;
cout << i + djelilac << "\n";
}
moduo = i%10;
mod1 = i%100;
if((((i - mod1)/100)) == moduo * 2)
cout << i << "\n";
}
}
 
Evo jos krace:
Kod:
#include <iostream>
using namespace std;
int main () 
{
int moduo = 0, mod1 = 0, djelilac = 0;
for(int i = 1; i < 1000; i++)
{
moduo = i%10; 
mod1 = i%100;
if((((i - moduo)/10) == moduo * 2) && (i <= 100))cout << i << "\n";
if((((i - mod1)/100) == moduo * 2) && (i >= 200))cout << i << "\n";
}
}
 
definitivno


imam jedan problem koji me muci vec duze vreme.

kako da ubacujem redom brojeve ili uopste bilo koje elemente u niz (bilo citranjem iz fajla ili sa tastature) dok ne naidjem na neki znak?
na primeru - korisnik unosi proizvoljan broj cifara i kad se smori upise @ i tada se zavrsava unosenje
svi brojevi se pakuju u niz

to naravno izgleda ovako nekako

while ucitana_vrednost<>'@'
{
read(ucitana_vrednost);
niz= ucitana_vreednost;
i++;
}

ako kako da definisem niz kad ovo i nije odredjeno, tj moze biti beskonacno?


ok je da stavim npr 10000 i racunam da niko nije dovoljno blesav da kuca 10000 brojeva, ali to nije to... treba da vazi za svaki slucaj...

da li je to uopste moguce?

(jer niz zahteva konstantu u definisanju, da nije tako mogao bih preko dva niza pa napravim niz za 1 veci, iskopiram prethodni, obrisem prethodni, ucitam vrednost, pa onda opet iz pocetka)


aj sad
 
E sada to je veliki problem i za takve neke zahteve se koriste liste ili kao shto je Lord reko koristish vector, ali da vidish kako bi to bilo sa nizom i zashto on nije pogodan za takve stvari.

Kod ccu uraditi u C-u zbig realloc funkcije.

Kod:
typedef struct array { int* num, len; } Array;

Array* read () {

   Array* a = malloc (sizeof(Array)); int number;
   a->num = NULL;
   a->len = 0;

   while(1){
      scanf("%d",&number);
   if(number == 9999)break;  //  Jbg ovde sam morao da zrtvujem jednu cifru
      a->num = realloc(a->num, (++a->len) * sizeof(int));
      a->num[a->len-1] = number;
   }

   return a;
}

E sad ovo nije dobro jer to unishtava komp. Pri svakom pozivanju realloc funkcije stvori se nova memorija za tvoj niz u koju se prepisu potrebni elementi iz starog niza i zatim se stara mem niza izbrishe i tebi se vrati adresa novog niza. Tako da verovatno imas sliku shta se deshava sa memorijom i procesorom pri chitanju 1000000000 elemenata na taj nachin.

U tu svrhu su ljudi smislili liste, ali otom potom.

pozdrav :)
 
Mada sad' mi dodje ideja za chitanje bez da zrtvujesh bilo koju cifru.

Kod:
  typedef struct array { int* num, len; } Array;

Array* read () {

   Array* a = malloc (sizeof(Array)); int number; char ch;
   a->num = NULL;
   a->len = 0;

   while(1){
      scanf("%d%c",&number, &ch);
   if(ch == '.' )break;  
      a->num = realloc(a->num, (++a->len) * sizeof(int));
      a->num[a->len-1] = number;
   }

   return a;
}


E evo ti link gde sam ukratko objasnio kako funkcionishu liste, ne znam mozda ti dobro dodje:

http://forum.krstarica.com/threads/86164

pozdrav :)
 

Back
Top