C++ zadaci,resenja,pitanja,tutoriali

I ja sam puno dumo kako bi se moglo rijesiti i takodjer sam mislio da je greska u "+" pitam sam profu preko PM i dobio sam kao neko sugerisanje al nisam nista pametniji nakon te poruke :/

Da li zna iko rjesenje sa "+"?


Ovo je moje rjesenje uzimajuci u obzir da sam koristio "," :

class Calculator
{

public static string WriteText(string input)
{
return input;
}

public static string WriteNumber(int a, int b)
{
return (a + b).ToString();
}
}


I sve radi kako treba :D, al kad ubacim "+" umjesto "," onda mi izbacuje slijedecu gresku "No overload for method 'WriteNumber' takes 1 arguments"
To se i meni desilo i zato kažem da nisam siguran kako to uraditi. Pogledaću online kako radi već postojeća metoda WriteLine gde možeš uneti 15 +24 i on će ti vratiti rezultat.
 
Rešenje je zapravo vrlo jednostavno. Nego se ja previše debilišem i lomim glavu...

KLASA Calculator:

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Moj_prvi_projekat
{
class Calculator
{
static string WriteText(string promenljiva)
{
return promenljiva; 
}
static string WriteNumber(int num1)
{
return Convert.ToString(num1);
}
static void Main(string[] args)
{
string s = Calculator.WriteText("Hello World!");
Console.WriteLine(s);

string n = Calculator.WriteNumber(53+28);
Console.WriteLine(n);
Console.ReadLine();
}
}
}

Poenta je što operator + može da se koristi bilo gde. Ako ja napišem kao parametar naše funkcije 5+1 , to nisu DVA int broja, to je jedan int. Jer operator odmah izvršava operaciju i vraća JEDAN broj. Tako da je taj plus samo trik bio. Ista je metoda kao i za return tekst običan.
 
Ma resio sam, glupost cista nego nije objasnjeno lepo. ovo je resenje :


class Program

{
public static void Main (string[] args)
{

string s = Calculator.WriteText("Hello World ! ");
Console.WriteLine(s);

string n = Calculator.WriteNumber(53+28);
Console.WriteLine(n);

Console.Read();

}
}

class Calculator
{
public static string WriteText(string b)
{
return b;
}

public static string WriteNumber(int number)

{
return number.ToString();
}

}


KOMEDIJA CISTA !!! tekst zadatka je nerazumljiv skroz bio.
Slusaj sad nadogradnju ovog zadatka :

Zadatak
1. U projekat iz prethodnog assignmenta doraditi klasu Calculator tako da se metode WriteText i WriteNumber pozivaju preko instance klase tako što ćete obrisati reč static iz deklaracije metode.
2. Kreirati konstruktor kao na slici i kreirati polja koja vidite na slici:

public Calculator(int operand1, int operand2)
{
this.operand1 = operand1;
this.operand2 = operand2;
}


Slika A2.1 – Konstruktor klase Calculator

3. U Main metodi kreirati instancu klase Calculator i proslediti konstruktoru neke proizvoljne vrednosti.

4. Pozvati metode WriteText i WriteNumber tako da se dobije isti rezultat na konzoli kao u prethodnom zadatku.
 
I ja sam puno dumo kako bi se moglo rijesiti i takodjer sam mislio da je greska u "+" pitam sam profu preko PM i dobio sam kao neko sugerisanje al nisam nista pametniji nakon te poruke :/

Da li zna iko rjesenje sa "+"?


Ovo je moje rjesenje uzimajuci u obzir da sam koristio "," :

class Calculator
{

public static string WriteText(string input)
{
return input;
}

public static string WriteNumber(int a, int b)
{
return (a + b).ToString();
}
}


I sve radi kako treba :D, al kad ubacim "+" umjesto "," onda mi izbacuje slijedecu gresku "No overload for method 'WriteNumber' takes 1 arguments"

class Calculator
{
public static string WriteText(string b)
{
return b;
}

public static string WriteNumber(int number)

{
return number.ToString();
}

}
 
Pa samo obriši iz klase Calculator u tvojim metodama Static i dodaj pre njih konstruktor, baš kako je on sam napisao. A posle u main metodu, klase Program napišeš prvo:
Calculator InstancaKlaseCalcualtor = new Calculator(34,56);

string s = InstancaKlaseCalcualtor .WriteText("Hello World ! ");
Console.WriteLine(s);

string n = InstancaKlaseCalcualtor .WriteNumber(53+28);
Console.WriteLine(n);


Sada je poenta što više ne koristiš GENERALNO Calculator klasu, već konkretno praviš instancu klase koja ima neke svoje vrednosti. Ali u primeru koji pominje profesor , kao parametre konstruktora ne možeš iskoristiti za prikazivanje svega onoga što se traži. Zato je u ovom slučaju konstruktor, bezvezan. Sve to što smestiš kao polja u klasu Calculator je neiskorišćeno.
 
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Moj_prvi_projekat
{
class Calculator
{
private int operand1;
private int operand2;
public Calculator(int operand1, int operand2)
{
this.operand1 = operand1;
this.operand2 = operand2;
}
public string WriteText(string promenljiva)
{
return promenljiva; 
}
public string WriteNumber(int num1)
{
return Convert.ToString(num1);
}
static void Main(string[] args)
{
Calculator InstancaKlaseCalcualtor = new Calculator(34,56);

string s = InstancaKlaseCalcualtor .WriteText("Hello World ! ");
Console.WriteLine(s);

string n = InstancaKlaseCalcualtor .WriteNumber(53+28);
Console.WriteLine(n);
}
}
}

Radim ovo na slepo, probaj tako.
 
@Alatour
Kod funkcionise iako si ga radio na slepo. Mozes li mi molim te objasniti zasto si kod instanciranja klase u zagradu stavio bas ta dva broja? Da li zato sto trazimo int operand1 i int operand2? Ta dva broja ne igraju nikakvu ulogu. Mogu da se stave bilo koja dva.
Malo me zbunjuje upotreba konstruktora? Cini mi se da nicemu ne sluzi. U kom primeru bi mi iskoristili taj konstruktor?
 
Pozdrav obojici, pretpostavljam da ste prijatelji i da ste iz istog mesta. Što se tiče razloga zašto sam stavio baš ta dva broja, ne postoji. To su dva nasumice odabrana broja čisto da prosledim neku vrednost konstruktoru. Jer kako kreirati klasu ako nisam dodelio vrednosti neke koje su obavezne. Uloga konstruktora je da dodeli neke vrednosti poljima unutar klase. Skoro nikada se to ne radi tako jer će svako napraviti svoju metodu koja će detaljno uzimati vrednosti od korisnika za sama polja. Ja ne želim da u programu upisujem vrednosti, jer koja je svrha takvog programa? Želim da korisnik unosi vrednosti kroz metodu koju ja osmislim. Bilo kako bilo, postoje da kaže dve vrste konstruktora. Možemo ga pisati ovako:

Kod:
Public ImeKlase() {
nekaPromenljiva = 0;
nekaPromenljiva1 = 5;
}

Ovo je najobičniji konstruktor koji odmah po kreiranju instance klase dodeljuje neke kako bi mi rekli DEFAULT vrednosti poljima u klasi. Tako da svaka promenljiva bude deklarisana na vreme. Postoji i OVERLOAD konstruktor ili ti preopterećen konstruktor koji izgleda evo ovako:

Kod:
Public Ime Klase(int num1, int num2) {
nekoPolje = num1;
nekoPolje2 = num2;
}
Imajte u vidu da ukoliko vi napravite overload konstruktor, ovaj običan ne postoji, jer ste vi napravili već overload. A ako ne napravite overload, pa ni običan, onda će sam kompajler da kreira neki default konstrutor, umesto vas, i dodeliće poljima vrednosti svojstvene njihovim tipovima. Ako je boolean, onda je false, ako je int, onda je 0 itd.

Recimo, ako postoji želja da se izračuna površina kvadrata, onda napravimo ovakav prost program:

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Moj_prvi_projekat
{
class Kvadrat
{
private int stranica;
public Kvadrat(int vrednost)
{
stranica = vrednost;
}
public int IzracunajPovrsinu() {
return stranica * stranica;
}
static void Main(string[] args)
{
Kvadrat InstancaKlaseKvadrat = new Kvadrat(4);

int P = InstancaKlaseKvadrat.IzracunajPovrsinu();
Console.WriteLine(P);
}
}
}

Međutim, ovo je nešto što ne zahteva ništa od korisnika, ovo je krajnje nepraktičan program. Da bi smo ga učinili praktičnijim, neophodno je da imamo sopstvenu metodu za unos podataka , pa modifikujemo klasu ovako:

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Moj_prvi_projekat
{
class Kvadrat
{
private int stranica;
public Kvadrat()
{
stranica = 0;
}
public void UzmiVrednosti() {
Console.WriteLine("Unesite koliko iznosi stranica kvadrata");
stranica = Convert.ToInt32(Console.ReadLine()); //Konvertuje string u integer i skladišti ga u promenljivu stranica
}
public int IzracunajPovrsinu() {
return stranica * stranica;
}
static void Main(string[] args)
{
Kvadrat InstancaKlaseKvadrat = new Kvadrat();
InstancaKlaseKvadrat.UzmiVrednosti();
int P = InstancaKlaseKvadrat.IzracunajPovrsinu();
Console.WriteLine(P);
}
}
}

Šta se ovde promenilo? Pa, obrisao sam overload konstruktor i stavio onaj default, čisto da po kreiranju klase dodeli vrednost 0 polju u klasi. A zatim sam odmah pozvao metodu UzmiVrednosti koja sama po sebi ispisuje tekst gde traži od korisnika da unese neki broj, a potom taj broj smešta u polje stranica. Imajte u vidu da je metoda ReadLine takva da vraća STRING, a ne integer, bez obzira ako korisnika unese broj. Pa sam zato konvertovao string u integer da ne bi bilo problema. Naravno, ova metoda koju sam ja kreirao daleko je od savršenstva jer ne postoji kontrola unosa. Šta ako je uneo -5? Nerealno je da površina bude negativan broj. Ili, šta ako je uneo tekst umesto broja? Program će krešovati i prestaće sa radom bez adekvatne poruke korisniku šta se desilo.

Ako postoje još neka pitanja, izvolite.
 
Pozdrav svima prisutnima, zamolio bih za jednu pomoc ukoliko neko moze da pomogne posto vidim da ste daleko iskusniji u pisanju koda od mene.
Naime dobio sam zadatak u skoli da ispisem liniju koda za pogadjanje broja, medjutim u taj kod moramo da unesemo 3 nivo-a.
Dakle da rezimiram. Potrebno je napisati kod za pogadjanje broja u 3 nivo-a. Prvi nivo je od 1-10 drugi od 1-100 i treci 1-1000 pri cemu korisnik bira nivo pre startovanja igre, kao i brojac iz koliko puta je pogodjen isti. Zamolio bih ako iko zna i ako je dobre volje da mi pomogne u resavanju ovog zadatka.
Ovde cu ostaviti liniju koda koju smo dobili na predavanju preko koje treba da dodamo te nivo-e kao i brojac iz kog puta je uspesno pogodjen nasumicni broj. Unapred zahvalan.

#include <stdio.h>
#include <stdlib.h>
#define TACNO 1
#define NETACNO 0

int main(int argc, char *argv[])
{
srand(time(NULL));

int x = rand(); // zamisljeni broj
int odg; // odgovor korisnika
int pog; // indikator pogotka

printf("Zamislio sam jedan ceo broj.\n");
pog = NETACNO;

while (pog == NETACNO)
{
printf("Pogodite taj broj: ");
scanf("%d", &odg);
if (odg < x)
{
printf("Zamislio sam veci broj.\n");
}
else if (odg > x)
{
printf("Zamislio sam manji broj.\n");
}
else
{
printf("Bravo, pogodili ste!\n");
pog = TACNO;
}
}

system("PAUSE");
return 0;
}
 
Ja sam skroz napravio program kako ja mislim da treba, ništa kao što si ti tu. Zadovoljava sve uslove koje si tražio, samo je rađeno na moj način:
Kod:
#include <stdio.h>
#include <stdlib.h>
void Igra();
int randBroj(int x);
void Proveri(int broj,int broji);
void Poredi(int broj, int rand);
int main(int argc, char *argv[])
{
    Igra();
  system("PAUSE");	
  return 0;
}
void Igra() {
     int rand = 0;
     int x,y;
     
     printf("Odaberite jedan od tri nivoa igre:\n1.Nasumice broj od 1-10\n2.Nasumice broj od 1-100\n3.Nasumice broj od 1-1000\n");
     printf("Vas nivo igre je: ");
     scanf("%d", &x);
     printf("\n");
     printf("Iz koliko pokusaja zelite igrati igru:");
     scanf("%d", &y);
     printf("\n");
     if(x == 1) {
          rand = randBroj(10);
           printf("Generisan je broj od 1-10. Izvolite pogoditi\n");
          }
     else if(x == 2) {
      rand = randBroj(100);
      printf("Generisan je broj od 1-100. Izvolite pogodit\ni");
      }
     else if(x == 3) {
          rand = randBroj(1000);
          printf("Generisan je broj od 1-1000. Izvolite pogoditi\n");
          }
          printf("%d",rand);
     Proveri(rand,y);
     }
int randBroj(int x) {
   srand(time(NULL));
   int randBroj = (rand() % x ) + 1;  
   return randBroj;
}
void Proveri(int broj,int broji) {
    int pokusaj = 0,brojac = 0;
    
    while(pokusaj != broj && brojac != broji) {
     printf("Vas broj je: ");
     scanf("%d", &pokusaj);
          printf("\n");
     if(pokusaj != broj) Poredi(pokusaj,broj);
     brojac++;
     }
     if(pokusaj == broj) printf("Cestitamo, pogodili ste broj iz %d pokusaja.\n",brojac);
     if (brojac == broji && pokusaj != broj) printf("Zao nam je , dostigli ste maksimalni broj pokusaja.\n");
}
void Poredi(int broj, int rand) {
     if(broj > rand) {
             printf("Uneti broj je veci od zamisljenog.\n");
             }
      else if(broj < rand) {
           printf("Uneti broj je manji od zamisljenog.\n");
      }
}
 
Hvala najlepse na odgovoru i pomoci Altaru, mozda nisam definisao najbolje tamo kad sam pisao da mi je potrebno na onaj vec postojeci kod dodati samo nivo-e igre, posto iskljucivo nam je tako trazio da se nadovezemo na onaj kod sto sam okacio, na njega da se dodaju nivo-i kao i brojac pokusaja iz koliko puta je broj pogodjen, bez onoga "iz koliko puta zelite da pogodite trazeni broj". Ako sta znaci napisacu ti ovde sta nam je on ispisao na tabli otrpilike kako bi to izgledalo sa onom linijom koda sto sam vec postavio.

int nivo, x;
printf("Izaberite nivo:[1, 2 ili 3]");
scanf("%d", nivo);

if(nivo==1)
{
x=rand()%10+1;
}
else if(nivo==2)
{
x=rand()%100+1;
}
else if(nivo==3)
{
x=rand()%1000+1;
}


Na ovaj nacin da se naprave 3 nivo-a i dodaju na onu liniju koda...
Nadam se da sam sad bolje pojasnio sta mi precizno treba, inace ovu liniju koda sto si mi poslao prosledio sam mu, ali mi je trazio da na ovaj nacin sto sam ti sad objanio ispisem kod. Hvala unapred, i hvala jos jednom na pomoci. Pozdrav.
 
Ne mogu sve na gotovo da ti radim, pogledaj program koji sam gore uradio, apsolutno imaš sve odgovore tu, jer je program apsolutno funkcionalan, samo trebaš nazreti rešenje. Šta više, podelio sam u funkcije, u manje celine tako da bude još lakše da vidiš šta se tu radi, prosto da znaš malo programiranja, ti bi odatle rešio zadatak.
 
Kao sto rekoh jos jednom se zahvaljujem na pomoci meni je i ovo pomoglo dosta, jer s`obzirom da vidis u kakvim uslovima ucimo programiranje, da napomenem bez racunara, bez projektora, bez lap topa jer skola trenutno nema uslove da iste doveze do nas (vanrednih studenata) koji smo udaljeni oko 250 km od sedista skole, kao i to da profesor nije u stanju da mi objasni bolje programiranje jer iskreno mi se dopada ta tema i voleo bih vise da se bavim time odnosno da ucim programiranje. Ako ti ista znaci imao sam kolokvijum iz programiranja pre 2 nedelje gde sam u 2 zadatka imao da napisem sta znaci "int size 27" kao i sta je to "%d", iskreno za i jedno i drugo ne znam definicije, a za pitanje nas iz grupe profesora sta je to int po zavrsetku kolokvijuma dobili smo da je int "kako je on rekao" neka deklarisana, sto i sam nisam ubedjen u to kao i ostatak nas iz prve godine... Na pitanje zato se pise "%d" dobili smo odgovor da je to tako utvrdjeno programom. Zato ja tebi jos jednom se najiskrenije zahvaljujem za kod koji si ispisao, ako nista vise sam naucio od tebe preko ovog koda, nego sa mojih 3 predavanja za 3 meseca sto sam imao u skoli. Hvala jos jednom na ljubaznosti i razumevanju. S`postovanjem Rade.
 
%d konkretno je format specifikator, odnosno, kada napišeš %d ti konkretno navodiš kompajleru s kojim tipom podatka on treba da radi. %d znači da je u pitanju integer. Tipa:
Kod:
printf("Promenljiva x ima vrednost %d" , x);
Kao što vidiš, ja unutar stringa, unutar teksta stavljam %d jer je to kao neki držač mesta dok ne dobije vrednost neku. A vrednost koju on dobija jeste vrednost promenljive x koju sam stavio malo kasnije. Možeš i ovako napisati bez problema:
Kod:
printf("Promenljiva x ima vrednost %d", dok promenljiva y ima vrednsot: %d  , x,y);
U ovom primeru sam iskoristio dva držača mesta, ali sam van stringa redom napisao , najpre x, pa y. Samo zato, on će umesto prvog %d prikazati vrednost x-a, a kasnije vrednost y-a.
Što se tiče ovog prvog pitanja šta znači int size 24, zaista se nisam sa tako nečim susreo. Možda je pogrešio. Možda je mislio int size = 27. AKo je tako , to znači da vrednost size, tipa int, ima vrednost 27.

Što se tiče programiranja, imaš mnoooogo lekcija online, gde možeš to jako dobro naučiti, bar osnove. Samo je pitanje koliko dobro znaš engleski jezik. Nije meni problem da ti odgovorim ovde na tvoja pitanja. Ali je tebi značajnije da istražuješ i shvatiš kako sve to radi. Programiranje je 20% poznavanje sintakse(naredbe, ključne reči..) , dok je 80% pisanje algoritama i razumevanje kako računar obrađuje sve informacije. Recimo, uzlaud ti hoćeš da program napiše faktorijel nekog ogromnog broja , ako ne postoji promenljiva koja bi uspela da tako veliki broj zapiše. Potrebno je razumeti računar i kako on radi, pa tek onda naći rešenje.
 
Alatoru, opet mi treba tvoja pomoc, zamolio bih te za pomoc?



{
class Calculator
{
private int operand1;
private int operand2;
public Calculator(int operand1, int operand2)
{
this.operand1 = operand1;
this.operand2 = operand2;
}
public string WriteText(string promenljiva)
{
return promenljiva;
}
public string WriteNumber(int num1)
{
return Convert.ToString(num1);
}
static void Main(string[] args)
{
Calculator InstancaKlaseCalcualtor = new Calculator(34,56);

string s = InstancaKlaseCalcualtor .WriteText("Hello World ! ");
Console.WriteLine(s);

string n = InstancaKlaseCalcualtor .WriteNumber(53+28);
Console.WriteLine(n);U projekat iz prethodnog assignmenta doraditi klasu Calculator, koja treba da sadrži sledeće:


konstantu PI,
konstruktor koji prihvata dve celobrojne vrednosti, operand1 i operand2,
metod za ispis vrednosti operand1 i operand2,
instancne metode za četiri računske operacije – sabiranje, oduzimanje, deljenje i množenje, koje će da vraćaju rezultat operacije nad vrednostima operand1 i operand2,
statičke metode za iste ove operacije, koje prihvataju operande kao parametre,
instancni metod površina kruga, koji računa površinu kruga poluprečnika operand1 i koristi konstantu PI.


U Main metodi kreirati objekat klase Calculator i pozvati sve metode, instancne i statičke, i ispisati rezultate tih metoda na konzolu.
 
Kako možeš tak tako da očekuješ da ti stalno pomažem. Hajde da ti je potrebna pomoć oko neke sitnice, da ti nešto nije jasno, pa da ti objasnim. Ali ti već više puta tražiš da bukvalno ceo zadatak uradim, a pritom ništa nisi naučio. Da si bar malo gledao šta sam do sada objašnjavao, definitivno bi znao sam ovo da uradiš jer je vrlo prosto. Imaš puno, puno tutorijala na internetu za C# , ali su na engleskom. Potrudi se malo, to što sam ja jedini na ovom forumu koji je voljan da pomogne, ne znači da ću da ti raditi zadatke skroz. Potrudi se malo. Da ne pominjem kako mi nikada nisi ni dao reputaciju za moj trud. Nije da je tražim ali to je ono, osnovna kultura na forumu, ako se neko iscima oko tebe.
 
Alatoru hvala na dosadasnjem pomaganju, ispisao sam kod onako kako je on to zahtevao, kao sto sam ti gore vec bio naveo...
Malo uz pomoc tvog koda, malo uz pomoc youtube-a i guglanja po netu... Uspeo sam da savladam za sada neke osnove koje zadovoljavaju moje potrebe, mada i dalje gledam razna objasnjavanja jer znanja nikad dosta.

Cenim tvoju pomoc... Do nekog drugog vidjenja..
Sve najbolje...
 

Back
Top