Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 2.6.2013, 9:59   #221
Sinisa Cubrilo
Član
 
Član od: 18.4.2012.
Poruke: 46
Zahvalnice: 13
Zahvaljeno 4 puta na 4 poruka
Određen forumom Re: How to... C++

//Napisati funkciju koja kao parametre ima dva niza znakova i kopira prvi u drugi
Kod:
#include <string.h>
#include <iostream>
#include "stdafx.h"
#define MAX 50

void kopiranje (char prvi[], char drugi[])
{
	int i=0;
	while(prvi[i])
	{
		drugi[i]=prvi[i];
		i++;
	}
	drugi[i]='\0';
}
void main()
{
	int i=0, c;
	char prvi[MAX], drugi [MAX];
	printf("Unesite niz karaktera:");
	c=getchar();
	while(c!=EOF && i<MAX){
		prvi[i]=c;
		i++;
		c=getchar();
	}
	prvi[i]='\0';
	kopiranje(prvi,drugi);
	printf("\nprvi: %s\n\ndrugi: %s", prvi, drugi);
	system("pause");
	
}

Kada pokrenem program, unesem niz karaktera ali mi ne kopira jedan u drugi, vec mi prikaze isto ono sto sam i uneo. Gde je greska?
Sinisa Cubrilo je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 11:27   #222
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

Citat:
while(c != EOF && i < MAX) {
...
}
prvi[i] = '\0'; // overflow
U ovom primeru moze da ti se desi da i bude MAX pa onda nemas mesta za '\0'.

Najsigurnije ti je da uradis unos sa fgets funkcijom:
Kod:
fgets(prvi, MAX, stdin);
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 12:03   #223
Sinisa Cubrilo
Član
 
Član od: 18.4.2012.
Poruke: 46
Zahvalnice: 13
Zahvaljeno 4 puta na 4 poruka
Određen forumom Re: How to... C++

A to ubacujem gde tacno?

Poslednja ispravka: Andross (2.6.2013 u 12:23) Razlog: cemu citat ako direkt odgovaras
Sinisa Cubrilo je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 12:23   #224
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

U serious?
Koji deo koda ti je relevantan za unos u prvi niz?
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 12:46   #225
Sinisa Cubrilo
Član
 
Član od: 18.4.2012.
Poruke: 46
Zahvalnice: 13
Zahvaljeno 4 puta na 4 poruka
Određen forumom Re: How to... C++

Citat:
Belphegor kaže: Pregled poruke
U serious?
Koji deo koda ti je relevantan za unos u prvi niz?
Kod:
printf("Unesite niz karaktera:");
	c=getchar();
	while(c!=EOF && i<MAX){
		prvi[i]=c;
		i++;
		c=getchar();
	}
Valjda?

P.s. nemoj zameriti, jako slabo znam c++
Sinisa Cubrilo je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 13:12   #226
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

Moras ovo resiti sam. Idi liniju po liniju kroz kod i zapitaj se za svaku pojedinacno zasto ti treba.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 2.6.2013, 14:50   #227
Lucic Nemanja
Starosedelac
 
Član od: 2.12.2005.
Lokacija: Beograd
Poruke: 1.241
Zahvalnice: 65
Zahvaljeno 76 puta na 49 poruka
Slanje poruke preko Skypea korisniku Lucic Nemanja
Određen forumom Re: How to... C++

Citat:
Sinisa Cubrilo kaže: Pregled poruke
//Napisati funkciju koja kao parametre ima dva niza znakova i kopira prvi u drugi
Kod:
#include <string.h>
#include <iostream>
#include "stdafx.h"
#define MAX 50

void kopiranje (char prvi[], char drugi[])
{
	int i=0;
	while(prvi[i])
	{
		drugi[i]=prvi[i];
		i++;
	}
	drugi[i]='\0';
}
void main()
{
	int i=0, c;
	char prvi[MAX], drugi [MAX];
	printf("Unesite niz karaktera:");
	c=getchar();
	while(c!=EOF && i<MAX){
		prvi[i]=c;
		i++;
		c=getchar();
	}
	prvi[i]='\0';
	kopiranje(prvi,drugi);
	printf("\nprvi: %s\n\ndrugi: %s", prvi, drugi);
	system("pause");
	
}

Kada pokrenem program, unesem niz karaktera ali mi ne kopira jedan u drugi, vec mi prikaze isto ono sto sam i uneo. Gde je greska?
U uslovu za unos ti treba c != '\n', a ne EOF. Problem je što ti kada unosiš niz znakova na standardnom ulazu između ostalog pritisneš enter da bi mu naznačio da završavaš sa unosom. I taj enter se pamti kao i svako drugo slovo koje napišeš, i to kao simbol za novi red. Recimo da uneseš niz znakova "Neki string", on će ti biti u memoriji zapisan kao "Neki string\n". Dakle koristiš novi red kao indikator kraja niza .
Lucic Nemanja je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 11:51   #228
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

jel moze neko da mi pokaze kako ovaj deo koda:
Kod:
posl = (!prvi ? prvi : posl->sled) = novi;
moze da se napise preko if-a?

mislim da je ovako, ali nisam siguran:
Kod:
 if(!prvi)
       posl=prvi=novi;
          else
       posl=posl->sled=novi;
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 12:10   #229
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: How to... C++

da, pravilno si napisao.

bitno je i da shvatis sta tu pise.

kod prvo proverava da li postoji prvi element liste.
(prvi je pokazivac ka elementu liste)

ako ne postoji ni jedan element, znaci da je lista prazna i da je taj objekat koji upravo dodajes u stvari prvi objekat.

u tom slucaju prvi = novi, jer smo dodali prvi

a ako nije prvi, nego vec imamo neki koji je u listi, onda na taj koji je DO SADA bio poslednji, dodamo da je ovaj koji ubacujemo sledeci.


dakle, ako imamo vec poslednji (nije prazna lista) onda radimo poslednji->sled = novi.


i na kraju, bez obzira da li si novi element dodao u praznu listu ili u listu koja vec ima clanove, svakako ce taj novi biti i poslednji, jer je poslednji ubacen.



mozda ti je jasnije ako se napise ovako:

Kod:
if (!prvi) {
prvi = novi;
}
else
{
poslednji->sled = novi;
}

//ovo je izbaceno napolje jer se svakako izvrsava:
poslednji = novi;

P.S.
pozdravi mi lasla
irreal je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku irreal na korisnoj poruci:
Twisterzemun (24.6.2013)
Stara 24.6.2013, 12:38   #230
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

Citat:
irreal kaže: Pregled poruke
P.S.
pozdravi mi lasla

hahahahaha, kako si znao?
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 15:14   #231
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: How to... C++

samo bi klaslo rado spakovao 8 linija u jednu sa ternary if operatorom na kolokvijumima i domacim zadacima studentima koji tek uce c++
irreal je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku irreal na korisnoj poruci:
Geomaster (24.6.2013)
Stara 24.6.2013, 15:33   #232
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: How to... C++

Klaslo? Haha, priceless.
Inače, zašto
Kod:
posl = (!prvi ? prvi : posl->sled) = novi;
kad može
Kod:
posl = (prvi ? posl->sled : prvi) = novi;
Jel on to pokušava da isteroriše ljude?
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 15:40   #233
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: How to... C++

Uradio sam dosta kolokvijuma i domacih zadataka, (i ako licno nikada u zivotu nisam bio student kod klasla, ali dosta drugara jeste) i jos uvek ne mogu da se odlucim da li pokusava odmah da nauci studente efikasno i kvalitetno ili pokusava da im zagorca zivot.

tanka je linija tu, a on balansira po njoj


npr, u ovom slucaju, zamka je u tome sto je "prvi" naravno pointer ka clanu liste i postoji van konteksta ove funkcije (koja inace dodaje novi element u listu). Pocetnik u programiranju moze da procita
Kod:
if (prvi) { }
i da pomisli da se taj kod izvrsava ako se trenutno dodaje prvi element, ne primecujuci da zapravo (!prvi) znaci da prvi dodajemo, jer prvi do sada nije ni postojao.

za pocetnike definitivno mala zamka kad se cita ako se ne razmisli dobro.

mislim da je obrnuo upravo da bi prvi deo if bloka bio slucaj kada jeste prvi a drugi kada nije.

Opet, ne znam kolko ce studenata razumeti zasto je to tako, a kolko cujem asistenti na predavanjima nisu od velike pomoci niti velikog razumevanja.

Greota...


Inace, kako drugacije, Laslo Kraus - Klaslo
irreal je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 16:17   #234
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

Пројектовати и реализовати на језику c++ следеће класе:

Генерички низ може да садржи задат број података неког типа. Може да се дохвати капацитет низа, број попуњених места и податак задатог редног броја, да се ставља податак на прво слободно место, да се капацитет низа повећа за задат број места и да се низ упише у излазни ток. Ову класу треба користити за ускладиштавање скупова података у каснијим класама и доноси 10 бонус поена преко номиналних 100.

Предмет има једнословну ознаку врсте предмета. Може да се одреди запремина и тежина предмета, да се направи полиморфна копија предмета, да се испита да ли су два предмета једнака и да се предмет упише у излазни ток. Пише се ознака врсте предмета.

Тело је хомоген предмет одређене специфичне тежине. У излазни ток се пишу ознака врсте предмета и специфична тежина тела.

Сфера, ваљак и купа су тела. У излазни ток се пишу ознака врсте, специфична тежина и димензије.

Склоп је предмет састављен од произвољног броја предмета произвољне врсте. Ствара се празан, после чега предмети се додају појединачно. У излазни ток се пишу подаци о садржаним предметима.

Складиште може да садржи задат број предмета до задате укупне запремине и тежине. Предмети се стављају појединачно на прво слободно место. Може да се извади први предмет који је једнак задатом предмету као узорку. Списак садржаних предмета може да се упише у излазни ток.

Радник има име. Сви радници морају да имају различита имена. Не сме да се прави копија радника. Радник може да производи предмет копирањем задатог предмета и да га одмах стави у задато складиште (предмет и складиште се не задају у моменту производње). Предмет чија копија се прави и складиште у које се копија ставља може да се промени.

У радионици може бити запошљен задат број радника, садржи једно складиште и низ предмета који се користе као оригинали за производњу. Број радних места, величина складишта и низ предмета за производњу задају се приликом стварања радионице. Може да се запосли радник на прво слободно радно место, да се радник са задатим именом отпушта, да му се придружи предмет чије копије треба да производи и складиште у које треба да ставља своје производе. Може да се продаје предмет из складишта који је једнак задатом узорку. Сви подаци о радионици (списак запослених раднинка, списак предмета које производи и садржај складишта) могу да се упишу у излазни ток.
-------------------------------------------------------------
Ovo je domaci zadatak kod Klasla iz Objektnog Programiranja 1. Ja sam dosao do skladista, i imam problem sa dodavanjem, oduzimanjem i ispisivanjem skladista, izbacuje mi gresku: i ceo dan pokusavam da sredim ovo i ne ide, zato molim za pomoc.

Poslednja ispravka: Twisterzemun (24.6.2013 u 16:28)
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 16:18   #235
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

skladiste.h
Kod:
#ifndef _SKLADISTE_H_
#define _SKLADISTE_H_
#include <iostream>
#include "predmet.h"
#include "tela.h"
#include "greske.h"
using namespace std;

class skladiste
{
	predmet** niz;
	int kap;
	double V;
	double Q;
	double currV;
	double currQ;
public:
	skladiste(double V,double Q,int k);
	skladiste(skladiste& s)
	{
		kap=s.kap;
		V=s.V;
		Q=s.Q;
		for(int i=0;i<s.kap;i++)
		{
			niz[i]=s.niz[i];
		}
	}
	~skladiste();
	skladiste& operator+=(predmet& p);
	predmet* uzmi(predmet& pp);
	skladiste& operator-=(predmet& p);
	friend ostream& operator<<(ostream& o, skladiste& s);
};

#endif
skladiste.cpp
Kod:
#include <iostream>
#include "skladiste.h"
#include "predmet.h"
#include "tela.h"
using namespace std;

skladiste::skladiste(double V,double Q, int k)
{
	niz=new predmet*[kap=k];
	for(int i=0;i<kap;i++)
		niz[i]=0;
	this->V=V;
	this->Q=Q;
	currV=0;
}

skladiste::~skladiste()
{
	for(int i=0;i<kap;i++)
		delete niz[i];
}

skladiste& skladiste::operator+=(predmet& p)
{
	if((currV + p.V())>V)
		throw("\n***Prekoracenje Zapremine!!!***");
	if((currQ + p.Q())>Q)
		throw("\n***Prekoracenje Tezine!!!***");
	int i = 0; 
	while (i<kap && niz[i]) 
		i++;
	if(i==kap)
		throw("\n***Prekoracenje kapaciteta!!!***");
	niz[i]=&p;
	currV+=p.V();
	currQ+=p.Q();
	return *this;
}
predmet* skladiste::uzmi(predmet& pp)
{
	int i=0;
	while (i<kap && (!niz[i] || !niz[i]->isti(pp))) 
		i++;
	if(i==kap)
		throw("\n***Nema tog predmeta u skladistu!!!***");
	predmet* p=niz[i];
	niz[i]=0;
	currV-=p->V();
	currQ-=p->Q();
	return p;
}
skladiste& skladiste::operator-=(predmet& p)
{
	skladiste::uzmi(p);
	return *this;
}
ostream& operator<<(ostream& o, skladiste& s)
{
	for(int i=0;i<s.kap;i++)
		o<<*s.niz[i]<<endl;
	return o;
}
V je ukupna zapremina skladista, Q je ukupna tezina skladista, currV je trenutna zapremina, a currQ je trenutna tezina. kap je kapacitet niza.
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 17:28   #236
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

Mrzi me da detaljisem pa cu u kratkim crtama reci ono sto vidim da ne valja

1. Pogresno alociras niz. 'si siguran da ti ne treba 1d niz?
How do I declare a 2d...
2. Ne valja ti kopi konstruktor, treba prvo da alociras prostor pre nego kopiras u niz.
3. Dodaj proveru da ne kopiras isti objekat (self assignment).
4. Koliko vidim nijedna metoda nije const-correct.
5. Koristi debugger, assert funkciju, postavi koji breakpoint...
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
Twisterzemun (24.6.2013)
Stara 24.6.2013, 17:49   #237
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

Citat:
Belphegor kaže: Pregled poruke
Mrzi me da detaljisem pa cu u kratkim crtama reci ono sto vidim da ne valja

1. Pogresno alociras niz. 'si siguran da ti ne treba 1d niz?
How do I declare a 2d...
2. Ne valja ti kopi konstruktor, treba prvo da alociras prostor pre nego kopiras u niz.
3. Dodaj proveru da ne kopiras isti objekat (self assignment).
4. Koliko vidim nijedna metoda nije const-correct.
5. Koristi debugger, assert funkciju, postavi koji breakpoint...
Izgleda da je najveci problem kod mene bio do visual studija(ili zbog toga sto nisam radio const-correctness?). Uglavnom i pored toga sto sam alocirao memoriju kod konstruktora kopije i dalje nije hteo da radi program. Onda sam drugaru poslao projekat, on je kod sebe na windowsu 7 kompajlirao i sve je najnormalnije radilo. Poslao mi je njegov projekat sa windows-a 7 i sad i kod mene na xp-u radi kako treba. Jel zna neko zbog cega se ovakvi problemi desavaju?

Citat:
1. Pogresno alociras niz. 'si siguran da ti ne treba 1d niz?
to sam deklarisao 1d niz pokazivaca tipa predmet, ako si na to mislio
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 18:32   #238
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: How to... C++

Može jako često da se desi da slučajno radi kako treba, ali to nikako nije dobar znak. Ako ti program bez ikakvih promena prvo ne radi pa radi, to je znak da postoji problem.
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 24.6.2013, 19:15   #239
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: How to... C++

Citat:
Geomaster kaže: Pregled poruke
Može jako često da se desi da slučajno radi kako treba, ali to nikako nije dobar znak. Ako ti program bez ikakvih promena prvo ne radi pa radi, to je znak da postoji problem.
Problem je jos bio u klasi za greske, kada npr prekoracim zapreminu ili tezinu skladista nece da mi izbaci poruku koju sam napisao da izbaci nego samo izbaci abort() i to je to, u tome je isto bio problem.
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 7.7.2013, 16:30   #240
abcdefgh
Novi član
 
Član od: 6.7.2013.
Poruke: 1
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: How to... C++

Ukoliko zelis nauciti C/C++ mozes pogledati i ovaj uvod>

www.scribd.com/duskoKoscica

Kompletno besplatno.
abcdefgh je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Tagovi
c++, how to, pomoc, programiranje

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno



Sva vremena su po Griniču +2 h. Sada je 17:51.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com