Programiranje u C++-u - pitanja i odgovori
- poruka: 7.284
- |
- čitano: 1.953.735
- |
- moderatori:
XXX-Man
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Ako mi netko može pomoći oko zadatka, bila bih jako zahvalna.
U program unijeti elemente polja cijelih brojeva, pri čemu korisnik na početku definira duljinu polja. Nakon unosa elemenata, kreira se novo polje bez duplih elemenata. Korisniku se nudi odabir: 1. ispiši novo polje bez duplih elemenata 2. ispiši veličinu novog polja 3. ispiši sve duple elemente 4. izlazak iz programa
Zadatak riješiti kreiranjem i korištenjem funkcija. Osigurati ponavljanje izvođenja do izlaza iz programa.
MOze li mi netko pomoci u programskom kodu u c++ kako da uspoeđujem polja?? I kako da onda poslije kreiram to polje bez duplih elemenata?
Hvala unaprijed
Zanima me zašto ne mogu ovako napraviti pretvorbu stupnjeva u radijane?
@ Jel netko zna kako da kažem coutu da mi float vrijednost ispiše samo na dvije decimale?
Ovako bi to u PAWNu išlo
printf("Broj %.2f", float_val);
gdje je 2 broj decimale.
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
#define _PI 3.14
#define _DEG2RAD(%0)\
(%0 / 180) * _PI
int main()
{
float _kut;
cout << "Unesi kut u stupnjevima" << endl;
cin >> _kut;
cout << "Kut " << _kut << "° je kut od " << _DEG2RAD(_kut) << " radijana." << endl;
getch();
return (false);
}
Prvo, otkud si ovo naucio, tj. pokupio tu foru s makroima?
Drugo, zamijeni ovo svoje s ovakvim nekakvim defineom:
#define _DEG2RAD(degrad) (degrad / 180) * _PI
Trece, citaj gresku koju ti kompajler kaze i bit ce ti jasno zasto ne mozes.
Greska je ova:
c.cpp:7:18: error: "%" may not appear in macro parameter list
Dakle, sam kompajler ti kaze da znak "%" se ne moze pojaviti u makrou! I vec znas zasto ne mozes napraviti pretvorbu tako kako si ti napravio, imas nedozvoljni znak u makrou! Samo citaj sto ti kaze kompajler.
Cetvrto, obicno se return u mainu pise "return 0", a ne return false.
Prvo, otkud si ovo naucio, tj. pokupio tu foru s makroima?
Drugo, zamijeni ovo svoje s ovakvim nekakvim defineom:
#define _DEG2RAD(degrad) (degrad / 180) * _PI
Trece, citaj gresku koju ti kompajler kaze i bit ce ti jasno zasto ne mozes.
Greska je ova:
c.cpp:7:18: error: "%" may not appear in macro parameter list
Dakle, sam kompajler ti kaze da znak "%" se ne moze pojaviti u makrou! I vec znas zasto ne mozes napraviti pretvorbu tako kako si ti napravio, imas nedozvoljni znak u makrou! Samo citaj sto ti kaze kompajler.
Cetvrto, obicno se return u mainu pise "return 0", a ne return false.
PAWN, tamo sam naučio dosta, tj još uvijek radim u učim u njemu. To sam shvatio kad sam skužio da to nije nešto što ide u memoriju(recimo _PI) nego to kompiler zamjeni.
Znam, meni je nekako bolje return (false);. To profa zna kako ja pišem, pa kad netko prepiše return (false); zna da je od mene :D
Jel može pomoć oko tog %.2f, ne znam kako da to napišem u cout.
I zašto mora ići ovaj & ispred _kut?
scanf("%f", &_kut);
Znam, meni je nekako bolje return (false);. To profa zna kako ja pišem, pa kad netko prepiše return (false); zna da je od mene :D
Jel može pomoć oko tog %.2f, ne znam kako da to napišem u cout.
I zašto mora ići ovaj & ispred _kut?
scanf("%f", &_kut);
Tako sam si i mislio. Dakle, PAWN je PAWN, a C++ je C++ i nemoj ih usporedivati na taj nacin i pokusavati ono sto radi u PAWN-u raditi u C++-u.
Sto se tice ovoga sa preciznoscu, opet ides logikom PAWN-a u C++-u, a to nije dobro. C++ je C++. Dakle, s obzirom da koristis cout objekt, onda napravi nesto ovako:
#include <iomanip> // zbog setprecision ovo ukljucis
int main()
{
// bla bla neki kod
cout << setprecision(2) << float_val << endl;
return 0;
}
Dakle, odmah od pocetka moras stvarati dobre navike, a nemoj mijesati.
Kako se radi u C++-u tako radi. Nemoj ici PAWN logikom, vec upisi u trazilicu "kako to i to C++".
Ako zelis pak koristiti C funkciju printf (dakle, C funkciju, ne PAWN funkciju), onda ovako nesto:
printf("%.2f", 3.14159);
Sto se tice scanf-a, otvori dokumentaciju, ne grize dokumentacija. :D
http://www.cplusplus.com/reference/cstdio/scanf/
Tu jasno mozes procitati:
These arguments are expected to be pointers: to store the result of a scanf operation on a regular variable, its name should be preceded by the reference operator (&) (see example).
Jos jednom ponavljam, uzmi onaj tutorial i prolazi polagano kroz njega. Kad prodes prvih 7 poglavlja, sve ovo uz pokazivace, ispis itd. ces znati. A ako i dalje ima nedoumica onda pitas. Takoder, ne ustrucavaj se pogledati dokumentaciju ili Stack Overflow.
Pa pošto više znam PAWN, onda nekakav teži problem prvo napravim u PAWNu i kasnije ga "prevodim" u C++
Koristit ću onda u nastavi stdio.h a ne iostream kako drugi rade. U PAWNu ima isto print i printf(print je za poruke bez parametara a u printf može ići poruka s %d ili nečim drugim) koji rade na isti način + i tamo ima sscanf s kojim čupam parametre iz komande(tipa iz /kick 6 razlog izčupam ID i razlog zašto izbacujem igrača). A i PAWN je C jezik, kao i PHP i C i C# i C++
Ja ne bih isao tim pristupom. Ako ucis C++ i zelis taj problem rijesiti u C++-u, onda odmah kreni na C++ i usredotoci se na specificnosti C++-a i kako nesto rijesiti u njemu. Drugo je ako dobro znas oba jezika, ali je u jednom brze za napraviti nesto. Kao sto je slucaj s Pythonom. Python je odlican za rapidno prototipiranje, ali je dosta spor. Tako da, ako je potrebna brzina, obicno se prvo stvar napise u Pythonu da se vidi da radi, a onda prebaci u C++ ili nesto drugo. No ovdje mi se cini bolje da se usredotocis na C++ jer njega zelis nauciti. Mislim, meni je svejedno, ja ti samo dajem savjet, ti napravi kako ti sam hoces.
Iostream ti treba zbog couta i cina. Stdio.h je stari header iz C-a za printf i scanf. Printf i scanf su funkcije i kao takve su puno brze od cout i cin objekata, tako da ako si na natjecanjima gdje se gleda brzina izvodenja algoritama, na to pripazi. Inace nema razloga zasto ne bi koristio cout i cin umjesto printfa i scanfa.
Razlika je izmedu "nesto je C jezik" (samo C moze biti C xD) i "nesto je nalik C-u" iliti "C-like jezik". Nabrojeni jezici su daleko od C-a, osim sto dijele sintaksu do odredene mjere. ;)
Ako mi netko može pomoći oko zadatka, bila bih jako zahvalna.
U program unijeti elemente polja cijelih brojeva, pri čemu korisnik na početku definira duljinu polja. Nakon unosa elemenata, kreira se novo polje bez duplih elemenata. Korisniku se nudi odabir: 1. ispiši novo polje bez duplih elemenata 2. ispiši veličinu novog polja 3. ispiši sve duple elemente 4. izlazak iz programa
Zadatak riješiti kreiranjem i korištenjem funkcija. Osigurati ponavljanje izvođenja do izlaza iz programa.
MOze li mi netko pomoci u programskom kodu u c++ kako da uspoeđujem polja?? I kako da onda poslije kreiram to polje bez duplih elemenata?
Hvala unaprijed
Dakle, ako imamo neki niz 1 2 4 3 1 3 5 4 2 3 , njegov niz bez duplih elemenata bio bi 1 2 4 3 5 a dupli elementi u nizu bili bi 1 2 4 3, tri ne pišem dva puta, ako ti profesor traži tako da ispišeš sve duplkate i to redosljedom, odnosno 1 3 4 2 3, oba načina ispisa duplkata su dolje.
Najlakše je ovdje pohvatati algoritam da odredimo definiciju kad element niza nije dupli, a nije dupli kad sa njegove lijeve strane u nizu nema nijedan element jednak njemu. Na tome se temelji algoritam u kodu dolje.
Ne namjeravam ti pisati funkcije niti kititi program izbornikom, to radi sama, ovo je algoritam da možeš dalje sama, nužna objašnjenja imaš u kodu. I ne moraš biti nikako zahvalna, osim možda klikniuti mišem na button hvala dolje ispod (uh što sam se izbezobrazio
)
#include<iostream>
using namespace std;
int main()
{
int n = 10, brojBezDuplih = 1;
bool sam;
int* niz = new int[n] {1, 2, 4, 3, 1, 3, 5, 4, 2, 3}; // dinamički alociramo niz za n mjesta (ti upisuješ konzolno i n i niz
for (int i = 1; i < n; i++) // tražimo velčinu niza bez duplikata
{
sam = true;
for (int j = 0; j < i; j++)
{
if (niz[i] == niz[j]) sam = false;
}
if (sam)brojBezDuplih++;
}
int* nizBezDuplih = new int[brojBezDuplih]; // dinamički alociramo niz bez duplih za dobijenu veličinu
nizBezDuplih[0] = niz[0]; // prvi nije duplikat
int index = 0;
for (int i = 1; i < n; i++) // unosimo elemente u niz bez duplikata
{
sam = true;
for (int j = 0; j < i; j++)
{
if (niz[i] == niz[j]) sam = false;
}
if(sam) nizBezDuplih[++index] = niz[i];
}
for (int i = 0; i < brojBezDuplih; i++) // ispisujemo niz bez duplikata
{
cout << nizBezDuplih[i];
}
cout << endl;
int brojDuplih;
for (int i = 0; i < brojBezDuplih; i++) // ispisujemo duplikate, samo jednom bez obzira koliko se puta ponavljaju
{
brojDuplih = 0;
for (int j = 0; j < n; j++)
{
if (nizBezDuplih[i] == niz[j]) brojDuplih++;
}
if (brojDuplih > 1) cout << nizBezDuplih[i];
}
cout << endl;
for (int i = 0; i < n; i++) // ispisujemo sve duplikate redosljedom
{
for (int j = 0; j < i; j++)
{
if (niz[i] == niz[j]) { cout << niz[i]; break; }
}
}
delete[] niz; // dealokacija niza
delete[] nizBezDuplih;
return 0;
}
Zezam se s C++om i imam error
enum _TOCKE
{
_A,
_B
};
enum _KOORD
{
_X,
_Y
};
float _tocke[_TOCKE][_KOORD];
int main()
{
getch();
return (false);
}
Error je
19 20 C:\Users\silvi\Desktop\C++.cpp [Error] expected primary-expression before ']' token
Zezam se s C++om i imam error
enum _TOCKE
{
_A,
_B
};
enum _KOORD
{
_X,
_Y
};
float _tocke[_TOCKE][_KOORD];
int main()
{
getch();
return (false);
}
Error je
19 20 C:\Users\silvi\Desktop\C++.cpp [Error] expected primary-expression before ']' token
enum ti je kreacija novog tipa podataka koji može poprimiti vrijednosti koje mu zadaš. Ne možeš reći tocke[_TOCKE], to je slicno kao da si rekao tocke[int].
Trebao bi pomoć oko ova dva zadatka prvi zadatak glasi:
1.Unesi svoje ime i prezime u niz te ih ispiši u obrnutom poretku ali prvo ime pa prezime
{ char a[20];
int i=0,duz=0;
printf("Unesi ime i prezime:\n");
gets (a);
duz=strlen(a);
for(i=duz-1;i>=0;i--)
printf("%c",a[i]);
getch();
}
Naime ja sam dobio prezime pa ime a treba obrnuto
2.Deklariraj dvije znakovne varijable te svaku od njih učitaj po jedan znak.Ispiši sve kombinacije koje se mogu dobiti od ta dva slova
Trebao bi pomoć oko ova dva zadatka prvi zadatak glasi:
1.Unesi svoje ime i prezime u niz te ih ispiši u obrnutom poretku ali prvo ime pa prezime
{ char a[20];
int i=0,duz=0;
printf("Unesi ime i prezime:\n");
gets (a);
duz=strlen(a);
for(i=duz-1;i>=0;i--)
printf("%c",a[i]);
getch();
}
Naime ja sam dobio prezime pa ime a treba obrnuto
2.Deklariraj dvije znakovne varijable te svaku od njih učitaj po jedan znak.Ispiši sve kombinacije koje se mogu dobiti od ta dva slova
Normalno da kad ispisujes unazad, ako imas "Pero Peric" i ides unazad ispisivati to ce biti "cireP oreP", a ne "oreP cireP". Najlakse bi ti bilo napraviti dvije varijable, jednu za ime drugu za prezime i onda ispisivati prvo ovu za ime unazad, a onda ovu za prezime.
Ili ako ti je strogo navedeno da to mora biti jedan niz, idi od posljednjeg dok ne dodjes do space-a pa pocni citat, onda idi opet od posljednjeg pa citaj prvog space-a.
Pokusaj i tako, dobro ti dodje za vjezbu : )
Ak iko može da uradi što pre bio bih zahvalan.
Napisati program koji za unešene cijele brojeve u dinamički niz dužine n, i cijelog broja X, pretražuje niz tražeći broj X, te uklanja njegovu prvu pojavu u nizu, zatim pomjera sve naredne elemente za jedno mjesto ulijevo i na kraju niza upisuje 0. Ispisati elemente niza nakon izvršene pretrage.
Npr. za niz od 5 elemenata [3, 5, 2, 6, 5] i X=5, novo stanje u nizu će biti [3, 2, 6, 5, 0].
Ak iko može da uradi što pre bio bih zahvalan.
Napisati program koji za unešene cijele brojeve u dinamički niz dužine n, i cijelog broja X, pretražuje niz tražeći broj X, te uklanja njegovu prvu pojavu u nizu, zatim pomjera sve naredne elemente za jedno mjesto ulijevo i na kraju niza upisuje 0. Ispisati elemente niza nakon izvršene pretrage.
Npr. za niz od 5 elemenata [3, 5, 2, 6, 5] i X=5, novo stanje u nizu će biti [3, 2, 6, 5, 0].
A zašto ti je hitno? Vježbe, kolokvij, ispit? :D Imaš nula dana na forumu, nisi stavio ni komadić rješenja (bar da pokažeš da si započeo s rješavanjem) što meni automatski govori da ti nije cilj niti naučiti, tako da 
Program treba ispisati sve brojeve i sume njihovih znamenaka u rasponu od početnog pa sve do krajnjeg u rastućem nizu (od najmanjeg prema najvećem).
Unos i ispis možete prilagoditi i uljepšati prema izboru, dani primjeri samo pokazuju funkcionalnost programa.
Primjer:
unos: 120 124
ispis: 120 = 3
121 = 4
122 = 5
123 = 6
124 = 7
Može mi netko pomoći do tuda sam došao kako dalje?
Možeš li staviti kod, preko slike se slabo vidi a fotka se i ne vidi dok ne predeš mišem preko nje.
#include <stdio.h> /* Standardna datoteka ulaza i izlaza*/
#include <math.h> /* Datoteka s matematickim funkcijama */
int main()
{int i,m,s,zz,n,N;
printf("Zbroj znamenaka cijelog broja\n");
printf("Cijeli broj n(100<n<999) ",n);
scanf("%d %d",&n,&N);
if
(n<=99 || n>=1000)
printf("\nPogrešno zadan broj!");
else
{
m=n%100;
s=0;
for (i=1;i<=m;i++)
{zz=n%10;
s+=zz;
n/=10;
}
printf("Suma znamenaka zadanog broja je %d",s);
}
return 0;
}
S tim kodom, ukucao sam 459 i 245 i dobijem 18, valja to?
Pa radi ti program
Jesi pročitao zadatak?
To ti samo zbroji prvi broj a trebalo bi napisati zbrojiti sve znamenke od recimo 120 do 124.
npr 120=3
121=4
122=5 itd
Ovako http://pastebin.com/qCAngsff ?
Iz nekog razloga mi kaže da je korjen nula a bez korjena mi za 101 kaže da je 4. Dakle, treba korjen izčupati.
@ Fixano, radi ti program ako sam dobro shvatio zadatak. ZAPRAVO NE RADI
Radi se o troznamenkastom broju, dakle čak nam ne treba ni standardni način izlučivanja najdesnije znamenke
while (broj > 0)
suma += broj % 10
broj /= 10
end while
Dovoljno je ovo
suma = broj / 100 + broj / 10 % 10 + broj % 10
Uradi ovaj odabir preko switcha i proslijedi mu izbor korisnika ,gdje ce odgovarajuci "case:" da pozove odgovarajucu funkciju za odredjeni izbor korisnika.
Polja uporedjujes preko for petlji ako imas polja tipa matrice onda sa ugnijezdenom for petljom a ako imas polje tipa jednog retka onda samo pomocu jedne for petlje.Sto se tice kreiranja novog polja, pa lijepo pise nakon unosa prvog da uneses drugo polje ja big stavila jedan if uslov po kom ako je unos prvog polja zavrsen poziva se funkcija unos(nesto);za unos drugog polja.
Pozdrav svima, postavio bi jedno pitanje koje nije direktno vezano na temu ali je mala digresija. Upisao bih FER ili pmf i kasnije bih se posvetio programiranju. Inače engleski mi je slabija strana, nije da je katastrofa ali nije ni neka bajka. Zanima me dali se može programirati bez naprednog znanja engleskog jezika i hoće li mi to stvarati veće probleme. Imam volju za učenjem i ispravljanjem nedostataka,ali me zanima mišljenje nekoga iskusnijega. Vidio sam i na oglasima za posao, svugdje je uvjet ''aktivno/ znanje engleskog''. Odnosi li se to na programiranje ili i na govorne vještine. Savjeti su dobrodošli.
Pozdrav svima, postavio bi jedno pitanje koje nije direktno vezano na temu ali je mala digresija. Upisao bih FER ili pmf i kasnije bih se posvetio programiranju. Inače engleski mi je slabija strana, nije da je katastrofa ali nije ni neka bajka. Zanima me dali se može programirati bez naprednog znanja engleskog jezika i hoće li mi to stvarati veće probleme. Imam volju za učenjem i ispravljanjem nedostataka,ali me zanima mišljenje nekoga iskusnijega. Vidio sam i na oglasima za posao, svugdje je uvjet ''aktivno/ znanje engleskog''. Odnosi li se to na programiranje ili i na govorne vještine. Savjeti su dobrodošli.
Nisam bas iskusan, student sam i kad pogramiran nesto za faks, >75% vrimena potrosin na stackoverflow-u i slicnim stranicama di su svi savjeti/rjesenja na engleski objasnjena.
Mislia sam da novije generacije nemaju skoro nista problema s engleskim. Mislin, ja ga u skoli nista nisan ucia, sav engleski znam s interneta/igrica i raznoraznih tutorial stranica (mozda dok sam jos gleda TV s koje serije/filma)
Ako si bas zapea, preporucam Petr-a Mitricheva. (mada koliko se sican on ugl Javu preferira)
Nisam bas iskusan, student sam i kad pogramiran nesto za faks, >75% vrimena potrosin na stackoverflow-u i slicnim stranicama di su svi savjeti/rjesenja na engleski objasnjena.
Mislia sam da novije generacije nemaju skoro nista problema s engleskim. Mislin, ja ga u skoli nista nisan ucia, sav engleski znam s interneta/igrica i raznoraznih tutorial stranica (mozda dok sam jos gleda TV s koje serije/filma)
sto ljudi sto cudi, viditi cemo sto ostali kazu. Volio bih cuti misljenje nekoga tko ima radnog iskustva ili je na zavrsnoj godini fakulteta


.