Gdje si zapeo? :P
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.712.635
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Molim vas,može li mi netko riješiti/napisati ova ...
Ne moze.
Tema se ne zove Programiranje u C++-u - rjesavanje domacih zadaca, nego Programiranje u C++-u - pitanja i odgovori. To ti ide ovako, ti postavis neko pitanje u vezi necega sto ti nije jasno, mi ti odgovorimo.
Molim vas,može li mi netko riješiti/napisati ova dva koda u c++?
1.Napišite program u kojem inicijalizirate tablicu sa cijelim brojevima veličine N×N (N definirati kao literalnu konstantu),te ispisati onu dijagonalu čija je suma brojeva veća.
2.Kreirajte funkciju koja provjerava da li su elementi niza parni.Ako jesu vraća ih nepromijenjene,a ako nisu množi ih s 2 prije slanja u main.U glavnom dijelu programa kreirajte 2 niza o 6 cjelobrojnih elemenata.Neka u prvi niz korisnik unese vrijednost preko konzole.Rezultati funkcije se pohranjuju na ogovarajuće mjesto u drugom nizu.Na kraju ispišite oba niza
Hvala :)
Evo drugi zadatak:
//2.Kreirajte funkciju koja provjerava da li su elementi niza parni.
// Ako jesu vraća ih nepromijenjene,a ako nisu množi ih s 2 prije
// slanja u main.U glavnom dijelu programa kreirajte 2 niza o 6 cjelobrojnih elemenata.
// Neka u prvi niz korisnik unese vrijednost preko konzole.
// Rezultati funkcije se pohranjuju na ogovarajuće mjesto u drugom nizu.
// Na kraju ispišite oba niza
#include <iostream>
#include <vector>
using namespace std;
int provjera(int a){
if(a % 2 == 1){
a = a * 2;
}
return a;
}
void ispis(int* polje){
for (int i = 0; i < 6; i++){
cout << polje[i] << " ";
}
return;
}
int main(){
int poljea[6];
int poljeb[6];
cout << "upisi 6 brojeva u polje:"<<endl;
for (int i = 0; i < 6; i++){
cout <<">";
cin >> poljea[i];
}
for (int i = 0; i < 6; i++){
poljeb[i] = provjera(poljea[i]);
}
cout << "Prvo polje: "<< endl;
ispis(poljea);
cout << "Drugo polje: " << endl;
ispis(poljeb);
return 0;
}
Prvo, daješ loš primjer ostalima. Ovo nije mjesto gdje se ljudima koji ne pokažu niti najmanji trud serviraju rješenja zadataka. Prijave se na forum (0 dana) tek toliko da nađu naivca koji će riješiti njihove zadaće, a takvih očito uvijek ima.
I drugo, da ovo rješenje predaš na faksu vjerojatno bi pao ispit jer očito ne znaš kako se polja predaju funkcijama (što spada u krajnje elementarnu stvar). I onda to svoje neznanje sada širiš dalje i krivo učiš druge jer će ovaj misliti da je ovo što si napisao dobro - a nije.
...
I drugo, da ovo rješenje predaš na faksu vjerojatno bi pao ispit jer očito ne znaš kako se polja predaju funkcijama (što spada u krajnje elementarnu stvar). I onda to svoje neznanje sada širiš dalje i krivo učiš druge jer će ovaj misliti da je ovo što si napisao dobro - a nije.
Dobro je sve predao, a ovako napamet cini mi se da program radi sto bi trebao. Ajd, nije poslao velicinu polja nego koristi magicne brojke, ali za ovakav trivic to nije neki problem.
Nego, ja bih vas sve ovdje rusio zbog ovakvog formatiranja, bez obzira sto je forumski editor mutav i kriv za to. Jer kad krenem citati ovakav kod dioptrija mi odmah skoci. Naucite se nositi s njim.
Hvala punoo! :)
Prvo, daješ loš primjer ostalima. Ovo nije mjesto gdje se ljudima koji ne pokažu niti najmanji trud serviraju rješenja zadataka. Prijave se na forum (0 dana) tek toliko da nađu naivca koji će riješiti njihove zadaće, a takvih očito uvijek ima.
I drugo, da ovo rješenje predaš na faksu vjerojatno bi pao ispit jer očito ne znaš kako se polja predaju funkcijama (što spada u krajnje elementarnu stvar). I onda to svoje neznanje sada širiš dalje i krivo učiš druge jer će ovaj misliti da je ovo što si napisao dobro - a nije.
1. Oprosti mi, ali ne mogu ti obećat da neću opet pomoći nekome. :'(
2. Kako je definiran zadatak rješenje je legitimno. Odakle tebi da ne znam "predat" polje u funkciju?
Prvo, daješ loš primjer ostalima. Ovo nije mjesto gdje se ljudima koji ne pokažu niti najmanji trud serviraju rješenja zadataka. Prijave se na forum (0 dana) tek toliko da nađu naivca koji će riješiti njihove zadaće, a takvih očito uvijek ima.
I drugo, da ovo rješenje predaš na faksu vjerojatno bi pao ispit jer očito ne znaš kako se polja predaju funkcijama (što spada u krajnje elementarnu stvar). I onda to svoje neznanje sada širiš dalje i krivo učiš druge jer će ovaj misliti da je ovo što si napisao dobro - a nije.
1. Oprosti mi, ali ne mogu ti obećat da neću opet pomoći nekome. :'(
2. Kako je definiran zadatak rješenje je legitimno. Odakle tebi da ne znam "predat" polje u funkciju?
1. Štoviše, slobodno pomozi. Svi smo tu da pomažemo. Međutim, velika je razlika pomagati nekome tko želi naučiti i nekome tko se samo želi riješiti domaće zadaće. Onaj tko želi naučiti trudi se sam, pokušava, pa negdje zapne i onda treba pomoć. Takvi onda postave code koji su do sada napravili i svi im vrlo rado pomognu. No ovi koji žele rješenje na pladnju ne žele učiti već žele da netko drugi umjesto njih riješi zadaću. Takvo što nije pomoć već konkretni posao koji se treba napraviti, pa se takvo što treba i naplaćivati.
2. Niti jedna funkcija se ne piše na način da radi s konstantnim brojem elemenata nekog polja, već se taj broj predaje kao parametar funkcije. Sve ostalo je loša praksa, a toga se najteže riješiti. Npr., već za neko sljedeće polje koje ima npr. 7 elemenata tvoja funkcija je neupotrebljiva. Ovako nekako bi to trebalo glasiti.
void ispit_polja(int *p, int elem){
for(int i = 0; i < elem; i++)
....
}
Isto tako, funkcija provjera je sasvim nepotrebna. Umjesto
poljeb[i] = provjera(poljea[i]);
dovoljno je bilo napisati
poljeb[i] = (poljea[i] % 2) ? (poljea[i] * poljea[i]) : poljea[i];
ili već upotrijebiti obični if-else. Isto tako, pisati return u funkciji tipa void je sasvim nepotrebno.
...
Nazalost, s ovakvim gotovim rjesenjem nisi nikome pomogao. Samo si izgubio svoje vrijeme bezveze. Mislim, nemoj misliti da kazem nesto protiv tebe, ne ne, lijepo je kad pomognes, ali kad se pomaze, zelimo da to bude sto konstruktivnije. Ali dati gotovo rjesenje nije konstruktivno.
Cilj u ovoj temi je nesto nauciti, kako oni koji pitaju, tako i oni koji odgovore. A nauciti se nesto moze samo ako pitas konkretna pitanja, ne znam, "zasto se ova funkcija poziva ovako?", "zasto mi izbacuje to to i to kad pozovem tu i tu funkciju?" i sl., ali opet ne pretjerivati i postavljati neka opcenita pitanja kojih je pun gugl (tipa, "sto je to pokazivac/pointer?" - mada su i takva pitanja podnosljivija od gotovanskih zahtjeva rjesenja) i za koja je potrebno samo malo mrdnuti dupe i izguglati.
A gotovani koji su se registrirali na forumu samo zato da im netko rijesi domacu zadacu nemaju ovdje sto traziti. Nit' je prvi koji je to napravio (prije stoprvi), a izgleda da nazalost niti zadnji. I uvijek su iste izlike, "ali mi to nismo radili", "profa je lud", "vi ne znate naseg profu", "nikad nam to nije pokazao", bla bla bla bla bla faking bla. Uvijek isto. Ok, profa nije pokazao, pa? Sjedi, izguglaj i nauci. A onda ako nesto nije jasno (a bit ce sigurno nejasnoca) pitaj ovdje. Ne da ti se? Zasto si onda uopce upisao skolu koja ima takve predmeta?
Ljudi u ovoj temi puno znaju i rado ce nekome pomoci i odgovoriti na pitanja, uputiti dalje i sl., ali takvi gotovani su stvarno dosadni. Cini mi se cak da je bilo i onih koji su pitali za rjesenja zadataka s poslovnog intervjua. Mislim zbilja...
Ja nemam problem s time da nekome rješim zadaću. Eto imao sam 3 minute viška vremena i natipkao sam.
Što se tiće komentara za zadatak - sve stoji, ali to tvoje je sve krivo ako dobro pročitaš zadatak(barem koliko se može vidjet iz ovog loše napisanog zadatka).
Zadatak kaže:
Polje je definirano - 6 cjelobrojnih elemenata, funkcija ne prima polje nego elemente.
Nema smisla dalje od toga. Mogli smo raditi i sa vektorima i sa memorijom izvan stack framea (heap iliti hrpa - int polje = new int[n]), dodati uvijet za nulu, što god ti padne na pamet. Ovdje je ipak cilj napraviti samo ono što je u zadatku zadano.
EDIT
1domagoj1 - njemu sam pomogao. Nije ga zanimala pomoć da nešto nauči, nego da mu netko riješi zadatak.
Ja nemam problem s time da nekome rješim zadaću. Eto imao sam 3 minute viška vremena i natipkao sam.
Onda si stavi u profil da rješavaš domaće zadaće tako da se ljudi direktno mogu tebi javiti a ne da time gnjave ostale po forumu.
Što se tiće komentara za zadatak - sve stoji, ali to tvoje je sve krivo ako dobro pročitaš zadatak(barem koliko se može vidjet iz ovog loše napisanog zadatka).
Ako pročitaš zadatak uopće se ne traži funkcija ispis, pa stoga niti predaja polja funkciji. Sve se trebalo riješiti u main-u.
Polje je definirano - 6 cjelobrojnih elemenata, funkcija ne prima polje nego elemente.
Nema smisla dalje od toga. Mogli smo raditi i sa vektorima i sa memorijom izvan stack framea (heap iliti hrpa - int polje = new int[n]), dodati uvijet za nulu, što god ti padne na pamet. Ovdje je ipak cilj napraviti samo ono što je u zadatku zadano.
Polje je ništa drugo nego skup elemenata. Stoga, ako ga već predaješ funkciji predaj ga na način da ta funkcija može raditi sa svakim poljom bez obzira na njegovu veličinu jer u protivnom tu funkciju treba duplicirati za svako drugo polje koje nema tu istu fiksnu veličinu.
I da. U zadataku je trebalo napraviti samo ono što je zadano. Ti možda nisi koristio vektor i ovu dinamičku alokaciju ali si zato napisao dvije sasvim nepotrebne funkcije.
EDIT
1domagoj1 - njemu sam pomogao. Nije ga zanimala pomoć da nešto nauči, nego da mu netko riješi zadatak.
Kao jesi. No kao sto rekoh, zasto je onda uopce upisao takvu skolu? Ok, mozda je to samo jedan predmet koji mora odraditi, ali nije njegov smjer. Ali k vragu i sve, sjedni onda i odradi to kako se spada i poslije se vise nikad ne moras niti sjetiti tog predmeta.
Evo da citiram pravilnik sa jednog drugog foruma...
Ne tražite da vam netko uradi cijeli domaći zadatak tj. ne očekujte da je bilo tko obavezan da odradi sav posao umjesto vas! Domaći zadaci su predviđeni za samostalan rad, a članovi foruma će svakako pokušati da pomognu kada i sami pokažete svoj angažman i inicijativu tj. kada prikažete koliko ste do sada sami uspjeli napraviti i gdje ste zapeli. U osnovi, to zvuči kao da je vaše vrijeme važnije od vremena onoga tko želi da vam odgovori. Uostalom, pomoć „jedan na jedan” se zove consulting a to nije besplatno.
Ovako nešto bi svakako i ovdje trebalo uvesti.
Zadatak kaže:
Polje je definirano - 6 cjelobrojnih elemenata, funkcija ne prima polje nego elemente.
Pročitaj ovo http://en.wikipedia.org/wiki/Magic_number_(programming)
P.S.
Programeru je cilj da isti kod ne piše 2 puta, to je i jedan od razloga za razvoj objektne metodologije. Da ti je netko tražio da dopišeš i dva niza od 7 elemenata, ti bi opet morao pisati kod ili kopirat pa mjenjat konstante (a znamo da je copy paste veliki izvor grešaka).
.
Može mala pomoć... Zapeo sam na samom kraju zadatka..... Zadatak glasi:
Na stog realiziran poljem spremaju se podatci cijelokupnog tipa (int). Napisati dodatnu funkciju koja ce isprazniti stog i ostaviti u njemu samo posljednji element. Ta funkcija stogu smije pristupati samo preko funkcija za rad sa stogom (ne smije direkktno pristupati elementima polja).
Ja sam u zadatku napiso funkciju (zuti marker) koja isprazni cijeli stog.. ali mi ne ide nikako to da isprazni sve elemente osim posljednjeg elementa tj. prvog dodanog!
#include <iostream>
using namespace std;
struct st
{
int element;
struct st *sljed;
struct st *vrh;
};
typedef struct st stog;
void dodijeli_vrh(stog *s)
{
s->vrh=NULL;
}
int dodajel(int element,stog *s)
{
stog *novi;
novi = new(stog);
if(novi != NULL)
{
novi->element = element;
novi->sljed = s->vrh;
s->vrh=novi;
return 1;
}
else
return 0;
}
int skini(int *element, stog *s)
{
stog *pom;
if(s->vrh)
{
*element = s->vrh->element;
pom = s->vrh->sljed;
delete(s->vrh);
s->vrh = pom;
return 1;
}
else
return 0;
}
int isprazni(stog *s)
{
while(s->vrh != NULL)
{
skini(&s->vrh->element,s);
}
}
void ispis(stog *s)
{
stog *novi;
novi=s->vrh;
while(novi)
{
cout<<novi->element<<endl;
novi=novi->sljed;
}
}
int main()
{
stog s;
dodijeli_vrh(&s);
int izbor=1;
int element;
while(izbor !=0){
cout<<"Unesite 1 za dodavanje, 2 za skidanje, 3 za isprazniti osim zadnjeg, 0 za izlaz"<<endl;
cin>>izbor;
switch (izbor) {
case 1:
cout<<"Dodaj na stog: ";
cin>>element;
dodajel(element,&s);
ispis(&s);
break;
case 2:
cout<<"Skini sa stoga"<<endl;
skini(&element,&s);
ispis(&s);
break;
case 3:
isprazniosim(&s);
break;
case 0:
return 0;
break;
default:
cout<<"Pogrešan izbor";
}
}
return 0;
}
int isprazni(stog *s)
{
while(s->vrh->sljed != NULL)
{
skini(&s->vrh->element,s);
}
}
Izvolis
Hvala! U biti sam tako i bio i radio, ali svaki put kad mi pozvo funkciju ono bi skinulo ali ne bi ispisalo taj element ne skinuti... tek poslije kad sam stavio void funkciju umjesto int ispraznio mi je ispiso zadnji broj.. ali bitno je da shvaćam princip ;)
Brzinsko pitanje. Pročitao sam u nekom članku da mnogi programeri pišu prvotni kod u Pythonu da bi ga kasnije "prepisali" u C++ (zbog performansi, optimizacije, itd.), pa me zanima je li to stvarno istina i koliko se isplati. Također, recimo da znam jako puno toga o Pythonu (ne znam još, ali pitam za ubuduće) i shvaćam neke osnove programiranja, bih li za C++ trebao naučiti samo sintaksu ili ima nekih posebnih stvari na koje bih trebao obratiti pozornost?
Pročitao sam u nekom članku da mnogi programeri pišu prvotni kod u Pythonu da bi ga kasnije "prepisali" u C++ (zbog performansi, optimizacije, itd.), pa me zanima je li to stvarno istina i koliko se isplati.
Nikad čuo za takvo nešto.
Je li neko ima neki koristan link vezan za dijagram toka. Znam osnovne stvari, al od funkcija zapinjem tj. npr. da li se razlikuju void i ostale funkcije zbog povratne vrijednosti, kako prikazujemo ako odmah u mainu ispisujemo povratnu vrijednost neke funkcije bez da je spremamo u neku posebnu varijablu i sl., pa ako ima neki link, tut ili nešto nek stavi. :)
Pročitao sam u nekom članku da mnogi programeri pišu prvotni kod u Pythonu da bi ga kasnije "prepisali" u C++ (zbog performansi, optimizacije, itd.), pa me zanima je li to stvarno istina i koliko se isplati.
Nikad čuo za takvo nešto.
Sto ne znaci da takvi slucajevi ne postoje
Uglavnom, python u ovome slucaju kao interaktivni dijagram toka, jednostavno je kod napisati, uvidjeti gresku, a i analiza je laksa
Sam nacin je pomalo cudan, istina.
A kolegi, jednoznacno *ne*, za neko bolje i khm, optimalno (sto se brzine tice) programiranje u C, C++ trebas shvacati neku srz toga, u smislu da trebas znati sto tocno racunalno radi kad mu napises to i to, da ne spominjem da je Python pun ugrdenih funkcija, recimo sort (iako ima i C++, poznavanje sortova npr bi ti za izolirani slucaj moglo uvelike smanjiti vrijeme izvrsavanja).
Iako to generalno znaci NE, python je veoma dobar pocetak :) preporucam
Brzinsko pitanje. Pročitao sam u nekom članku da mnogi programeri pišu prvotni kod u Pythonu da bi ga kasnije "prepisali" u C++ (zbog performansi, optimizacije, itd.), pa me zanima je li to stvarno istina i koliko se isplati. Također, recimo da znam jako puno toga o Pythonu (ne znam još, ali pitam za ubuduće) i shvaćam neke osnove programiranja, bih li za C++ trebao naučiti samo sintaksu ili ima nekih posebnih stvari na koje bih trebao obratiti pozornost?
U Pythonu je veoma lako nabrzinu sklepati nekakav prototip, pa si to vjerojatno procitao.
Pozz, kako da u vektor spremim brojeve koji se nalaze u jednoj liniji koda, npr neka imam brojeve koje se u konzoli nalaze:
1 2 3 4 5
i kako da ih spremim u vektor nakon što pritisnem tipku enter?
1.pitanje
imam funkciju char* Getline(int line, char *text); koja vraća odabranu liniju (red) u tekstu, tekst koji sam vraćao je bio pohranjen u static polju, i sve je super radilo dok nisam dvaput pozvao tu funkciju iz istog reda (u sprintfu). Kako bi napravio da to stvarno radi kako bi trebalo (vraća string)?
2. pitanje
želim dijeliti neke varijable između SAMO dvije funkcije (threada), najjednostavniji način ta to? namespaceovi?
Pozz, kako da u vektor spremim brojeve koji se nalaze u jednoj liniji koda, npr neka imam brojeve koje se u konzoli nalaze:
1 2 3 4 5
i kako da ih spremim u vektor nakon što pritisnem tipku enter?
int broj;
vector<int> a;
//sad ovo u neku petlju:
cout<< "upisi broj";
cin >> broj;
a.push_back(broj);
dali postoji neki sort koji bi mi sortirao matricu prema 1. ili nekom drugom elementu u retku, ali da sačuva ostale vrijednosti u tom redu. znam da sam malo nejasno objasnio ali evo primjer na matrici 5X3:
nesortirano:
5 8 9
2 0 0
9 5 5
1 1 4
6 9 9
sortirano prema 1. elementu u retku:
1 1 4
2 0 0
5 8 9
6 9 9
9 5 5
nije mi problem to isprogramirati, ali dobro bi mi došlo za natjecanja kada bi imao naredbu sort.
dali postoji neki sort koji bi mi sortirao matricu prema 1. ili nekom drugom elementu u retku, ali da sačuva ostale vrijednosti u tom redu. znam da sam malo nejasno objasnio ali evo primjer na matrici 5X3:
nesortirano:
5 8 9
2 0 0
9 5 5
1 1 4
6 9 9
sortirano prema 1. elementu u retku:
1 1 4
2 0 0
5 8 9
6 9 9
9 5 5
nije mi problem to isprogramirati, ali dobro bi mi došlo za natjecanja kada bi imao naredbu sort.
Možeš preko funkcije sort(iz std::algorithm), samo trebaš napisat funkciju za usporedbu elemenata.
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector<vector<int> > vec;
bool compare(const vector<int> &a, const vector<int> &b) {
return a[0] < b[0];
}
int main() {
vec.resize(5);
for (unsigned i = 0; i < vec.size(); i++)
vec[i].resize(3);
vec[0][0] = 5; vec[0][1] = 8; vec[0][2] = 9;
vec[1][0] = 2; vec[1][1] = 0; vec[1][2] = 0;
vec[2][0] = 9; vec[2][1] = 5; vec[2][2] = 5;
vec[3][0] = 1; vec[3][1] = 1; vec[3][2] = 4;
vec[4][0] = 6; vec[4][1] = 9; vec[4][2] = 9;
sort(vec.begin(), vec.end(), compare);
for (unsigned i = 0; i < vec.size(); i++) {
for (unsigned j = 0; j < vec[i].size(); j++)
printf("%d ", vec[i][j]);
printf("\n");
}
return 0;
}
Htio bih krenuti sa programiranjem u C++ .
O ovome preogramskom jeziku na znam ništa, aspolutni početnik.
Malo sam istraživo po internetu i vidio sam da ljudi preporučuju ovu knjigu, što vi kažete ?
Od drugih programskih jezika znam : Osnove qbasica, pythona, logo ..
LP!
:)
Htio bih krenuti sa programiranjem u C++ .
O ovome preogramskom jeziku na znam ništa, aspolutni početnik.
Malo sam istraživo po internetu i vidio sam da ljudi preporučuju ovu knjigu, što vi kažete ?
Od drugih programskih jezika znam : Osnove qbasica, pythona, logo ..
LP!
:)
Pogledaj sticki teme u podforumu, tocnije, ovu:
http://www.bug.hr/forum/topic/programiranje/literatura-programiranje/117438.aspx