C++ zadaci,resenja,pitanja,tutoriali

pre svega hvala na odgovoru
objasnio si mi razliku izmedju While...Do i For u prakticnoj primeni
pomoglo mi je jer sada kad stavim for petlju program radi onako kako zelim

medjutim sad kad deklarisem promenljivu odgovor kao sto si mi ti objasnio sa
char odgovor[50]; ponovo imam ranije pomenuti problem
ako u odgovor upisem jedno slovo on petlju izvrsi jednom (bas onako kako i treba)
ako u odgovor upisem dva slova program dva puta ispise printf ("%d: %d=\n",n,karta);
odnosno prvi put ispise slucajan broj
drugi put ispise slucajan broj i ceka moj odgovr
tako vazi i za odgovor od 3 karaktera tri puta ispise petlju i onda ceka odgovor na zadnji ispisani slucajan broj

u principu ja bih zeleo, bez obzira koliko odgovor ima karaktera(jedan, dva...deset), posle svakog odgovora da se petlja normalno izvrsi -po jednom
 
Davno sam radio C, te sam zarđao oko toga. Iskreno, ne bih ti preporučio kao početniku da radiš C jer je jako nezahvalan za učenje. Uhvati se nekog prostijeg programskog jezika, kao Python recimo. Python sintaksa je jako lepa i laka za razumeti. Tamo nemaš ovakvih problema. I taj jezik može ti samo pomoći da zavoliš učenje. Dobro je pogledati ove tutorijale:
 
Treba mi pomoć oko sledećeg zadatka u C programskom jeziku:
Napisati program kojim se čita datoteka: znak po znak; i odredjuje broj pojavljivanja malih slova u datoteci bez w, x, y.
Problem je što ne znam kako da eliminišem w, x i y da ih ne broji. Ovako kako sam napisao broji sva mala slova.

Kod:
#include <stdio.h>

int main ()
{
	FILE * f;
	char c;
	int malaslova = 0;

	f = fopen ("H:\\fajl.txt", "r");

	if (f == NULL) {
		printf("Greska prilikom otvaranja fajla!");
	}
	else
	{
		do {
			c = fgetc(f);
			if ((c >= 'a') && (c <= 'z')) {
				malaslova++;
			}
		} while (c != EOF);

		fclose (f);
		printf("Broj pojavljivanja malih slova u datoteci: %d \n", malaslova);
	}
	return 0;
}
 
Rešio sam problem ovako:

Kod:
#include <stdio.h>

int main ()
{
	FILE * f;
	char c;
	int malaslova = 0;

	f = fopen ("H:\\fajl.txt", "r");

	if (f == NULL) {
		printf("Greska prilikom otvaranja fajla!");
	}
	else
	{
		do {
			c = fgetc(f);
			if ((c >= 'a') && (c <= 'z') && (c != 'w') && (c != 'x') && (c != 'y')) {
				malaslova++;
			}
		} while (c != EOF);

		fclose (f);
		printf("Broj pojavljivanja malih slova u datoteci bez w, x, y: %d \n", malaslova);
	}
	return 0;
}
 
radim u code::blocks-u i hoce da upise u fajl, ali nece da cita iz njega. (sad sam izbacila petlju, samo sam htela da proverim citanje i upis)

Kod:
#include <iostream>
#include <fstream>

...

char zn;
  std::fstream fajl;
    fajl.open("radar.txt", std::ios::in | ios:: out);
...


if (fajl.is_open()) {

    cout<<'p';


      fajl<<'k';
      fajl>>zn; (umesto ovog reda moze i fajl.get(zn);)

on upise u fajl taj 'k', ali ne cita iz fajla. sta uraditi?

resila sam ovo, mozda ste i znali o cemu je rec ali evo sad sam shvatila, put i get u fajlovima (ili valjda analogno << i >>)

znaci tek otvoren fajl

char zn;
fajl.open("radar.txt", std::ios::in | ios::out);
fajl.put(‘x’); - stavlja na prvo mesto u fajlu i pomera pokazivac na sledece mesto!! tako da get cita sa drugog mesta
*stavlja na prvo mesto ‘x’ bez obzira da li u fajlu vec ima nesto pre njega, na prvo mesto upise u svakom slucaju

fajl.get(zn); - uzima sa drugog mesta u fajlu i pomera pokazivac na sledece mesto

ako sad stavite nesto sa put, on ce upisati na trece mesto
za dodavanje na kraj fajla rezim je izgleda ios::app ali nisam s tim radila
 
hm da li je kao sto sam napisala, ali ako nesto ne radi treba isprobati. na kraju kad uzima sa "get" i dodje do kraja fajla onda se zakuca na poslednjem bajtu, ne cita EOF

haha
kad je program ovakav:

fajl "bin.bin" je prazan
Kod:
int main() {

        char zn,citac, pisac;
        std::ifstream fajl;
        std::fstream binarni;

        fajl.open("radar.txt"); // ispravno napravi ovaj fajl
        binarni.open("bin.bin", std::ios::binary | std::ios::out | std::ios::in); // izl. fajl

     //   std::cout<<binarni.tellp();
    //    std::cout<<binarni.tellg();
   //     do {
            binarni.get(zn);
            std::cout<<zn;
            std::cout<<std::char_traits<char>::eof();
            binarni.get(zn);
            std::cout<<zn;
     //   } while (zn!=std::char_traits<char>::eof());
        return 0;

}

na ovo ispisuje "w-1w"

kad dodam "std::cout<<binarni.tellg();" u kod, ispisuje "0 -1 "
 
Poslednja izmena:
Pozdrav svima,
Mi smo tim pod nazivom Click by click.. resili smo da napravimo youtube kanal na kome mozete naci tutorijale u vezi programiranja. Ja sam poceo seriju HTML/CSS-a ali ce moj kolega uskoro da krene sa serijalom C++,a zelimo da sto bolje i sto vise pokrijemo programske jezike i uvedemo pocetnike u svet programiranja. Nadam se da ce da vam se svidja nasa ideja i da cemo redovno da postavljamo klipove. Ako ste zainteresovani slobodno nas zapratite i u komentaru dajte predloge sta bi ste zeleli od serijala da vidite.
nas youtube kanal je: https://www.youtube.com/channel/UC2FTPnvnZPkSsJ66jBkQLbw

P.S Sada smo na pocetku tako da ne zamerite ako nismo sve pokrili, nadam se da cemo da se poboljsamo u buducnosti
Srdacan pozdrav,
Aleksandar!
 
Pozdrav svima,
Mi smo tim pod nazivom Click by click.. resili smo da napravimo youtube kanal na kome mozete naci tutorijale u vezi programiranja. Ja sam poceo seriju HTML/CSS-a ali ce moj kolega uskoro da krene sa serijalom C++,a zelimo da sto bolje i sto vise pokrijemo programske jezike i uvedemo pocetnike u svet programiranja. Nadam se da ce da vam se svidja nasa ideja i da cemo redovno da postavljamo klipove. Ako ste zainteresovani slobodno nas zapratite i u komentaru dajte predloge sta bi ste zeleli od serijala da vidite.
nas youtube kanal je: https://www.youtube.com/channel/UC2FTPnvnZPkSsJ66jBkQLbw

P.S Sada smo na pocetku tako da ne zamerite ako nismo sve pokrili, nadam se da cemo da se poboljsamo u buducnosti
Srdacan pozdrav,
Aleksandar!
Ово је одлично! :ok:
 
Hvala na lepim rečima.. Nadam se da će ovaj naš rad nekome stvarno pomoći..
Jer znam dosta njih koji imaju želju da nauče programiranje ali nemaju znanje engleskog pa im sve ovo pada nekako teško.
Па да држите и часове енглеског? :lol: Ипак ће бити неопходан онима који стварно хоће да се баве програмирањем.
 
Pozdrav svima,
Trebao bih pomoc oko jednog zadatka iz programskog jezika C++.U tom zadatku se trazi da na ulazu:
1.Unesemo recenicu
2.Unesemo rijec koja moze a i ne mora da se nalazi u recenici (ako se ne nalazi, da se ispise "Ta rijec se ne nalazi u datoj recenici")
3.Unesemo rijec kojom zelimo da zamijenimo prethodnu unijetu rijec.
Na kraju program ispise recenicu sa zamijenjenom rijeci
Npr.
Ulaz:
Danas je lijep dan
lijep
suncan

Izlaz:
Danas je suncan dan

ili
Ulaz:
Danas je lijep dan
juce

Izlaz:
Rijec se ne nalazi u recenici

Ovdje se vjerovatno koriste stringovi, a ja sam pocetnik i nemam mnogo iskustva sa ovakvim zadacima gdje su slova u pitanju. :-)
 
Е овако.
Написао сам једно од могућих решења, али оно може бити и једноставније. Код за овако једноставан задатак изгледа овако компликовано јер сам га писао баш по С++, користећи класе и остало. Може да буде и једноставнији ако је решење ближе С-у него С++. Користио сам неки старији компајлер код кога не постоји string као тип па је и то додатно проширило код. И додао сам да програм не буде "осетљив" на величину слова (није case sensitive). То је добро ако је тражена реч на почетку реченице, па почиње великим словом, а ти си куцао мало слово у претрази.
Програм ради онако како си тражио, прво се унесе реченица, затим реч, потом следи провера да ли та реч постоји у реченици, ако не постоји испише се порука, а ако постоји изврши се замена и испише нова реченица.
Све је то помало допринело комплексности и дужини кода.

Пример:
Ulaz:
Druga drugarica ceka druga i drugare.
- prva rec: druga
- druga rec: mesec

Izlaz:
Mesec drugarica ceka mesec i drugare.


Прво ћу поставити цео код, а онда испод следе објашњења.

Kod:
#include <iostream.h>
#include <string.h>
#include <ctype.h>

#define DUZ 201

class String {
   public:
      String () { linija = new char [DUZ]; }
      ~String () { delete [] linija; linija = NULL; }

      int pronadji (String& rec);
      void zameni (String& prva_rec, String& druga_rec);
   private:
      char* linija;

      friend ostream& operator<< (ostream& it, String& s)
     { if (s.linija) it << s.linija; return it; }
      friend istream& operator>> (istream& ut, String& s)
     { ut.getline(s.linija, DUZ); return ut; }
};

int String::pronadji (String& rec) {
   int i, j;
   String pomocni, pom_rec, reci;

   i = 0;
   do {
      if (linija[i] >= 'A' && linija[i] <= 'Z')
     pomocni.linija[i] = linija[i] + 'a' - 'A';
      else pomocni.linija[i] = linija[i];
   } while (linija[i++] != '\0');

   i = 0;
   do {
      if (rec.linija[i] >= 'A' && rec.linija[i] <= 'Z')
     pom_rec.linija[i] = rec.linija[i] + 'a' - 'A';
      else pom_rec.linija[i] = rec.linija[i];
   } while (rec.linija[i++] != '\0');

   for (i = 0; pomocni.linija[i] != '\0'; i++) {
      j = 0;
      while (pomocni.linija[i] >= 'a' && pomocni.linija[i] <= 'z')
     reci.linija[j++] = pomocni.linija[i++];
      reci.linija[j] = '\0';

      if (strcmp (reci.linija, pom_rec.linija) == 0) return 1;
   }

   return 0;
}

void String::zameni (String& prva_rec, String& druga_rec) {
   int i, j, k, l;
   String reci, pom_rec;
   String novi;

   i = 0;
   do {
      if (isupper(prva_rec.linija[i]))
        pom_rec.linija[i] = prva_rec.linija[i] + 'a' - 'A';
      else pom_rec.linija[i] = prva_rec.linija[i];
   } while (prva_rec.linija[i++] != '\0');

   for (i = 0, l = 0; linija[i] != '\0'; i++) {
      j = 0;
      k = i;
      while (isupper(linija[k]) || islower(linija[k]))
      if (isupper(linija[k]))
         reci.linija[j++] = linija[k++] + 'a' - 'A';
      else reci.linija[j++] = linija[k++];
      reci.linija[j] = '\0';

      if (strlen(reci.linija) > 0)
      if (strcmp (reci.linija, pom_rec.linija) == 0) {
      i = k;
         for (j = 0; j < strlen(druga_rec.linija); l++, j++)
            novi.linija[l] = druga_rec.linija[j];
      }
      else
         for (; i < k; i++, l++)
            novi.linija[l] = linija[i];
      novi.linija[l++] = linija[i];
   }

   novi.linija[l] = '\0';

   if (islower(novi.linija[0])) novi.linija[0] = novi.linija[0] + 'A' - 'a';
   
   delete [] linija;
   linija = novi.linija;
   novi.linija = NULL;
}

int main () {
   String recenica;
   String prva_rec, druga_rec;

   cout << "\nUlaz:" << endl;
   cin >> recenica;

   cout << "- prva rec: ";
   cin >> prva_rec;

   if (recenica.pronadji(prva_rec)) {
      cout << "- druga rec: ";
      cin >> druga_rec;

      recenica.zameni(prva_rec, druga_rec);

      cout << "\nIzlaz:\n" << recenica << endl;
   }
   else cout << "\nIzlaz:\nRec " << prva_rec << " se ne nalazi u recenici.";

   return 0;
}

Kod:
#include <iostream.h>
#include <string.h>
#include <ctype.h>

#define DUZ 201
Прва датотека коју укључујемо је датотека за улаз и излаз која нам омогућава да уносимо и добијамо податке.
Друга је за неке функције за рад са стринговима.
Трећа нам треба због функција за проверу да ли су слова велика, или мала.
На крају је дефинисана максимална дужина стринга (речи, или реченице).

Kod:
class String {
   public:
      String () { linija = new char [DUZ]; }
      ~String () { delete [] linija; linija = NULL; }

      int pronadji (String& rec);
      void zameni (String& prva_rec, String& druga_rec);
   private:
      char* linija;

      friend ostream& operator<< (ostream& it, String& s)
     { if (s.linija) it << s.linija; return it; }
      friend istream& operator>> (istream& ut, String& s)
     { ut.getline(s.linija, DUZ); return ut; }
};
Класа String.
Има конструктор који ће при креирању објекта типа String направити динамички низ карактера (char) дужине DUZ.
Следећи је деструктор који се имплицитно активира при уништавању објекта типа String. Нпр. када се излази из функције у којој је створен такав објекат, тај објекат ће бити уништен. Тада се позива деструктор. Деструктор у овом случају уништава динамички низ карактера.
Имамо две јавне методе за проналажење одређене речи и замену одређене речи другом речи. Речи су типа String. У класи се не може користити тип те класе, већ показивач, или у овом случају референца (&) на ту класу.
Постоји један приватан атрибут који се зове linija и који је типа char* - показивач на карактер. linija ће показивати на динамички низ карактера при креирању објекта типа String.
На крају су две пријатељске глобалне функције за унос стринга и његово исписивање. Није битно у ком се делу налазе: public, private, или protected који овде немамо. Ове две функције омогућавају да се стрингови уносе и исписују на следећи начин:
Kod:
String recenica;
cin >> recenica;
cout << recenica;

Kod:
int String::pronadji (String& rec) {
   int i, j;
   String pomocni, pom_rec, reci;

   i = 0;
   do {
      if (linija[i] >= 'A' && linija[i] <= 'Z')
     pomocni.linija[i] = linija[i] + 'a' - 'A';
      else pomocni.linija[i] = linija[i];
   } while (linija[i++] != '\0');

   i = 0;
   do {
      if (rec.linija[i] >= 'A' && rec.linija[i] <= 'Z')
     pom_rec.linija[i] = rec.linija[i] + 'a' - 'A';
      else pom_rec.linija[i] = rec.linija[i];
   } while (rec.linija[i++] != '\0');

   for (i = 0; pomocni.linija[i] != '\0'; i++) {
      j = 0;
      while (pomocni.linija[i] >= 'a' && pomocni.linija[i] <= 'z')
     reci.linija[j++] = pomocni.linija[i++];
      reci.linija[j] = '\0';

      if (strcmp (reci.linija, pom_rec.linija) == 0) return 1;
   }

   return 0;
}
Ово је дефиниција функције за проналажење реци у реченици.
int String:: pronadji (String& rec)
Функција враћа 0 ако реч не постоји у реченици, а 1 ако постоји. С++ има логички тип bool и треба користити true и false, али као што сам рекао, користио сам стари компајлер.
String:: означава да функција, тј. метода припада класи String. Ово је разрешавање досега.
Функција има један аргумент типа референца на String.
int i, j;
String pomocni, pom_rec, reci;

Имамо две целобројне променљиве и три стринга.
Прво ћемо реченицу уписати у pomocni са свим малим словима. Затим се у pom_rec уписује реч коју тражимо, такође са свим малим словима. У reci се уписује једна по једна реч из реченице и пореди са траженом речи све док се она не пронађе.
i = 0;
do {
if (linija >= 'A' && linija <= 'Z')
pomocni.linija = linija + 'a' - 'A';
else pomocni.linija = linija;
} while (linija[i++] != '\0');

i = 0;
do {
if (rec.linija >= 'A' && rec.linija <= 'Z')
pom_rec.linija = rec.linija + 'a' - 'A';
else pom_rec.linija = rec.linija;
} while (rec.linija[i++] != '\0');

Први код преписује реченицу у pomocni, а други тражену реч у pom_rec.
Обрати пажњу да pom_rec и остали стрингови нису заиста прави стрингови. То су објекти типа класе String, која садржи динамички низ карактера linija. Та linija је заправо прави стринг, када се на крај дода знак за крај стринга '\0'.
for (i = 0; pomocni.linija != '\0'; i++) {
j = 0;
while (pomocni.linija >= 'a' && pomocni.linija <= 'z')
reci.linija[j++] = pomocni.linija[i++];
reci.linija[j] = '\0';

if (strcmp (reci.linija, pom_rec.linija) == 0) return 1;
}

return 0;

Овде се врши претрага. Прво се препише једна реч из pomocni у reci, а затим се reci пореди са pom_rec. Ако се поклапају функција враћа 1. Када се стигне до краја pomocni, тј. када се све речи упореде са pom_rec, значи да није било поклапања и враћа се 0.
 
Kod:
void String::zameni (String& prva_rec, String& druga_rec) {
   int i, j, k, l;
   String reci, pom_rec;
   String novi;

   i = 0;
   do {
      if (isupper(prva_rec.linija[i]))
         pom_rec.linija[i] = prva_rec.linija[i] + 'a' - 'A';
      else pom_rec.linija[i] = prva_rec.linija[i];
   } while (prva_rec.linija[i++] != '\0');

   for (i = 0, l = 0; linija[i] != '\0'; i++) {
      j = 0;
      k = i;
      while (isupper(linija[k]) || islower(linija[k]))
      if (isupper(linija[k]))
         reci.linija[j++] = linija[k++] + 'a' - 'A';
      else reci.linija[j++] = linija[k++];
      reci.linija[j] = '\0';

      if (strlen(reci.linija) > 0)
      if (strcmp (reci.linija, pom_rec.linija) == 0) {
      i = k;
         for (j = 0; j < strlen(druga_rec.linija); l++, j++)
            novi.linija[l] = druga_rec.linija[j];
      }
      else
         for (; i < k; i++, l++)
            novi.linija[l] = linija[i];
      novi.linija[l++] = linija[i];
   }

   novi.linija[l] = '\0';

   if (islower(novi.linija[0])) novi.linija[0] = novi.linija[0] + 'A' - 'a';
  
   delete [] linija;
   linija = novi.linija;
   novi.linija = NULL;
}
void String::zameni (String& prva_rec, String& druga_rec)
Ова функција замењује речи у реченици. prva_rec се замењује са druga_rec. Нема повратну вредност.
int i, j, k, l;
String reci, pom_rec;
String novi;

i - кретање по реченици, при сваком новом проласку показује на почетак речи, или на неки знак
j - помоћна променљива
k - кретање по реченици, након што је издвојена реч из реченице, показује на следећи знак иза те речи
l - кретање по новој реченици у којој су речи замењене
i = 0;
do {
if (isupper(prva_rec.linija))
pom_rec.linija = prva_rec.linija + 'a' - 'A';
else pom_rec.linija = prva_rec.linija;
} while (prva_rec.linija[i++] != '\0');

Овај код преписује реч коју треба заменити у pom_rec са свим малим словима.
Када се то обави, потребно је тражити реч по реч у реченици. Уколико је пронађена тражена реч, уместо ње се упише druga_rec у novi, у супротном препише се оригинална реч из реченице.
for (i = 0, l = 0; linija != '\0'; i++) {
j = 0; k = i;
while (isupper(linija[k]) || islower(linija[k]))
if (isupper(linija[k]))
reci.linija[j++] = linija[k++] + 'a' - 'A';
else reci.linija[j++] = linija[k++];
reci.linija[j] = '\0';

Препише се реч из реченице у reci.
if (strlen(reci.linija) > 0)
if (strcmp (reci.linija, pom_rec.linija) == 0) {
i = k;
for (j = 0; j < strlen(druga_rec.linija); l++, j++)
novi.linija[l] = druga_rec.linija[j];
}
else
for (; i < k; i++, l++)
novi.linija[l] = linija;

Уколико је пронађена било каква реч (не ради се о знаку интерпункције, размаку...) реч се пореди са траженом речи која је претходно преписана у pom_rec. Уколико је то та реч, у novi се уписује реч за замену, druga_rec, у супротном се упише реч из реченице.
novi.linija[l++] = linija;
}
novi.linija[l] = '\0';
if (islower(novi.linija[0]))
novi.linija[0] = novi.linija[0] + 'A' - 'a';

delete [] linija;
linija = novi.linija;
novi.linija = NULL;
}
Потом се у novi упише знак на којем је тренутно i (размак, зарез, тачка...).
Даље се дода знак за крај стринга, провери се да ли је прво слово реченице мало и ако јесте преправи се да буде велико.
На крају се обрише оригинална реченица, преусмери се да показује на нову, а linija од novi се преусмери да не показује на ту нову реченицу, него на NULL.
 
Alal Vera svaka čast. Doduše mene takvo "crno belo" programiranje nikada nije interesovalo samo windows programiranje MFC C++....
Оно је још занимљивије, али никада нисам радио такво програмирање. Јесам давно нешто у DELPHI-ју. И направио сам пар игара у С-у где постоји кориснички интерфејс, али никада нисам правио неке праве апликације као што си ти.
 
Ja sam jedno vreme vise bio okrenut razvijanju desktop aplikacija, dok sam u poslednje 2 godine vise usresredjen na konstrukciju i analizu algoritama, kao i na Web development.
Moram priznati da sam se prilicno zainteresovao za algoritmiku i da sam poprilicno naucio. Mada, kad implementiram neki algoritam ili strukturu podataka, obicno radim u C-u, navika.
 
Мени боље иде С него С++, јер сам га много више користио.
Алгоритми су јако занимљиви. Какве алгоритме изучаваш: стекови, редови, листе, стабла...?
Код С++ ми је занимљиво што можеш да направиш потпуно нови тип података и све прилагодиш њему. Програми у С++-у су врло врло флексибилни.
 
Мени боље иде С него С++, јер сам га много више користио.
Алгоритми су јако занимљиви. Какве алгоритме изучаваш: стекови, редови, листе, стабла...?
Код С++ ми је занимљиво што можеш да направиш потпуно нови тип података и све прилагодиш њему. Програми у С++-у су врло врло флексибилни.

Strukture podataka: liste (stekovi, redovi), hash tabele, stabla, heap(mada se heap mogao svrstati medju stabla) i grafovi
Izucavam analizu slozenosti i strategije pri konstrukciji algoritama. Npr konstrukcija algoritama indukcijom, pohlepni algoritmi, divide and conquer, dinamicko programiranje, dokazivanje NP-kompletnosti za probleme, algebarske algoritme(medju kojima je i jedan jako vazan algoritam, a to je brza furijeova transformacija, popularnija pod nazivom FFT), grafovske algoritme...

Nikada ranije se nisam toliko osvrtao na analizu algoritama koje napisem, i njihovu efikasnost. A sada sve sto pisem, dobro ispitam slozenost algoritama (nekad analiza algoritama zaista ume da bude zeznuta, a posebno pri analizi slozenosti algoritama u prosecnom slucaju). Lepo je kad za kod koji napises mozes da dokazes da je on zaista korektan i kad mozes da procenis koja je slozenost algoritma. Pre nego sto nesto pocnem da radim, pre svega sve dobro izanaliziram i procenim koja je struktura podataka najoptimalnija, mada to cesto ne bude neka "cista" struktura podataka koju mozes da kategorises i da kazes "to je stablo npr". Obicno se cesto koriste hibridne strukture podataka, kako bi se postigla jos bolja efikasnost.

A sto se tice C++, sa njim nista ozbiljnije nisam radio vec par godina. Pre nekoliko meseci sam naucio Javu, pa sam u JavaFX-u radio neke aplikacije, tacnije vise sam se zezao.
Ali naravno, Java otpada kad moras da pises programe kod kojih je brzina od kljucnog znacaja zato sto je Java interpretirana od strane JVM.
 
Poslednja izmena:
Супер је што толико времена посвећујеш анализи комплексности програма и оптимизацији.
У Јави никада нисам радио нешто озбиљно и не знам је добро, само неке основне ствари. Јава је опет добра што је преносива. Сваки језик има своје предности и мане, као и алгоритми и структуре података.
 
poslala sam svoj problem na Boost-build mailing listu, pa kad vam bude dosadno eto:

http://lists.boost.org/boost-build/2015/08/28212.php
to je moj post

- - - - - - - - - -

boost su valjda raznorazne c++ biblioteke, zaglavlja i slično, gledam sajt exercism.io
pa bi trebalo da se to iskompajlira prvo (mada i ne mora, ali tamo kažu da tako uradim) i meni to nešto neće, nekad ranije je htelo ali ne sećam se kako
 
Ali naravno, Java otpada kad moras da pises programe kod kojih je brzina od kljucnog znacaja zato sto je Java interpretirana od strane JVM.

Off: Ovo je imalo smisla nekad, kad Java virtuelna mašina još nije bila toliko brza. Danas to nije slučaj. Stvar je u tome da, što je više programski jezik na višem nivou to je metaforički rečeno 'udaljeniji od lima' i njegovo izvršavanje traje duže. Te aplikacije kod kojih je brzina kritičan faktor obično koriste C/C++ u kombinaciji sa Asemblerom (uzmimo za primer sistemsko programiranje). Sve to zavisi od optimizacije (fino je to što se baviš proučavanjem algoritama, mnogi to ni ne uzimaju u obzir kada razvijaju aplikacije, a dosta je značajno). C++ jeste brži, ali je Java lakša za pisanje aplikacija jer ima ugrađen garbage collecting i nema smaračke pokazivače koji meni lično idu na nerve.
 
Off: Ovo je imalo smisla nekad, kad Java virtuelna mašina još nije bila toliko brza. Danas to nije slučaj. Stvar je u tome da, što je više programski jezik na višem nivou to je metaforički rečeno 'udaljeniji od lima' i njegovo izvršavanje traje duže. Te aplikacije kod kojih je brzina kritičan faktor obično koriste C/C++ u kombinaciji sa Asemblerom (uzmimo za primer sistemsko programiranje). Sve to zavisi od optimizacije (fino je to što se baviš proučavanjem algoritama, mnogi to ni ne uzimaju u obzir kada razvijaju aplikacije, a dosta je značajno). C++ jeste brži, ali je Java lakša za pisanje aplikacija jer ima ugrađen garbage collecting i nema smaračke pokazivače koji meni lično idu na nerve.

Naravno, slazem se u vezi svega, JVM je sada mnogo brza, i mnogo je elegantnija kao jezik. A pored toga je i multiplatformska.

Ali ce se svakako C++ i asembler i dalje koristiti za razvoj aplikacija kod kojih je brzina kritican faktor, poput realtime sistema itd...
 

Back
Top