» »

[C++] vprašanja

[C++] vprašanja

««
9 / 9
»
»»

OwcA ::

Ne moreš, ker ni nobene standardne knjižnice za delo s socketi.
Otroška radovednost - gonilo napredka.

Loaded ::

Lp

Imam vprašanje. Imam dinamično povezan enosmerni seznam. Kako naj ugotovim stevilo elementov v seznamu?

Lp
Loadeed

OwcA ::

Sprehodiš se od začetka do konca in šteješ.
Otroška radovednost - gonilo napredka.

Loaded ::

Lp

Zanima kaj je v naslednjih finkcijah napaka; v 1. ne vem kaj je, v drugi pa nimam dobrega argumenta za funkc. strlen, kako ga naj drugače napišem?


void Najv_vpisna(student* k) {
student*q = k;
student*q = r;

while(q != NULL) {
 while(r != NULL) {
  if(q->vpisna > r->vpisna) 
   izpiše q->vpisna;
  else
   izpiše r->vpisna;
q = q->k_struk;
r = r->k_struk;
}
}
}


druga

void Povprecna(student* k) {
student*q = k;
int stevec = 0;
int vsota = 0;

while(q != NULL) {
vsota += strlen(q->priimek);
stevec += stevec+1;
}
izpiši vsota / stevec;
}

Lp
Loadeed

Gundolf ::

Tretja vrstica: student*q = r;
A si hotel napisat student*r = k; ?

Pa tudi drugače ti tale funkcija ne bo delovala ravno tako kot želiš. Dve zanki? Saj veš da lahko v enem sprehodu čez vse elemente (v eni zanki) najdeš max element?

Druga funkcija:
> stevec += stevec+1;
Uh-oh. eksponentna funkcija - stevec bo sel takole: 0, 1, 3, 7, 15, 31, ... Verjetno si hotel napisat stevec = stevec+1; ali stevec += 1; ali pa kar ++stevec;
Kaj računaš povprečno dolžino priimka?

Zgodovina sprememb…

  • spremenil: Gundolf ()

Loaded ::

Ne, ni to. Vse to so tiskarske napake ja .. moja površnost.
Pri prvi mi pri dveh elementih v seznamu mi izpiše drugega vnešenega, pri treh pa že dva itd. Pa sploh ne največjega. Pa še kaki segmentation fault na koncu.

Popravljeno:
void Najv_vpisna(student* k) {
student*q = k;
student*r = k;

while(q != NULL) {
  if( q->vpisna > r->vpisna ) 
   izpiše q->vpisna;
  else
   izpiše r->vpisna;
q = q->k_struk;
r = r->k_struk;
}
}


druga: Tukaj je napaka v funkc. strlen, ki noče sprejeti priimka kot niza tipa string. Samo ne vem kako bi naj drugače dobil dolžino niza.

void Povprecna(student* k) {
student*q = k;
int stevec = 0;
int vsota = 0;

while(q != NULL) {
vsota += strlen(q->priimek);
stevec += 1;
}
izpiši vsota / stevec;
}


Drugače pa hvala za odgovor Gundolf. ...Pa še kdaj.

Lp
Loadeed

Zgodovina sprememb…

  • spremenilo: CCfly ()

OwcA ::

seg. fault dobiš, ker
1) nimaš inicializiranih kazalcev
2) packaš kjer ni tvoje

strlen() dela na tipu char*, std::string pa ima lastno metodo size().

A je tako težko pogledati v dokumentacijo? :\
Otroška radovednost - gonilo napredka.

bozjak ::

imam eno zelo nubovsko vprašanje. čeprav sem strica googla nemalokrat vprašal po odgovoru eš zdj ne znam rešit problema.

Pred kratkim sem se odločil za preskok v form programing v VS c++ 2005. Imam sledeč problem, nikakor ne znam pretvoriti vsebine text boxa (textBox1->text) v string (*char). Pravzaprav želim vsebino pretvoriti v int, a vse funkcije ki sem jih našel znajo pretvarjati samo iz *char... Kako bi torej uspešno pretvarjal med tipom string in ostalimi števičnimi tipi?

Hvala za odgovor! Lp
http://upor.blogec.si
http://bozjak.deviantart.com

OwcA ::

Kakšnega tipa je textBox1->text? Po vsej verjetnosi ima metodo za pretvarjanje v char*.
Otroška radovednost - gonilo napredka.

bozjak ::

kot sem napisal je textbox1->text tipa system::String... o metodi za pretvarjanje pa ne duha ne sluha za to tudi sprašujem.

Lp
http://upor.blogec.si
http://bozjak.deviantart.com

OwcA ::

Otroška radovednost - gonilo napredka.

Bojevnik ::

Malo obujam temo:D

Kakšna je razlika med strukturo in razredom?

Mavrik ::

V strukturo boš bolj težko funkcije nametal.
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • vrnilo v prejšnje stanje: CCfly ()

robbe ::

V strukturi maš po defaultu vse atribute in metode public, v razredu vse private. Pri strukturi nimaš konstruktorja,destruktorja, pri razredu to imaš... pa najbrž bi se še kaj našlo :D

CCfly ::

V strukturo boš bolj težko funkcije nametal.

Krepko se motiš.

Pri strukturi nimaš konstruktorja, destruktorja

Seveda jih imaš.


Struktura se od class-a ne razlikuje v ničemer, razen že omenjenega private / public dostopa do atributov in metod.
"My goodness, we forgot generics!" -- Danny Kalev

bozjak ::

tudi v strukturo gredo funkcije, le profesorji ponavadi to pozabijo omeniti. Tudi konstruktor in destruktor imamo. Primer:


#include <stdio.h>
#include <stdlib.h>

struct bla {
       int b;
       
       int kvadrat (int a) { return a*a; }
       void povecaj () {
           b++;
           printf("Zaradi uporabe konstruktorja je b sedaj: %d\n", b);
           }
       bla() { b = 5;}
       ~bla() {printf("Struktura izbrisana.\n");}
       };

int main()
{
    int a;
    bla b;
    
    printf("a: ");
    scanf("%d", &a);
    printf("a na kvadrat: %d\n", b.kvadrat(a));
    
    b.povecaj();
    
    b.~bla();
    system("PAUSE");
    return 0;
}



Lp
http://upor.blogec.si
http://bozjak.deviantart.com

CCfly ::

Obstaja lepo pravilo vedenja, kjer ne popravljaš svojih komentarjev, če se nadaljevanje debate nanaša na njih. Pa četudi napišeš kakšno neumnost.
"My goodness, we forgot generics!" -- Danny Kalev

robbe ::

Za konstruktorje pa destruktorje pa nism vedu... my bad:8)

Makina ::

Mene samo zanima, kako bi npr.če je pod case 2: črka a. in pod case 22: črka b in ko bi izbral 2 zatem pritisnil enter bi se vpisalo v niz. Nakonc bi pa ta niz celoten izpisal.

Lp
Trisixty s kombajnom bočno.

Makina ::

Spet smo dobili eno nalogo, pa sm že premislu velik pa še vseen ne vem čist točn kak.
Navodilo: Definiraj strukturo z imenom KROG.
Struktura naj ima en parameter in sicer polmer naj bo tipa dauble.
Definiraj dva objekta struktura z imenom krogA in krogB. Napiši funkcijo, ki ti pove katera ploščina kroga je večja.
Lp.
Trisixty s kombajnom bočno.

bozjak ::

če si mal pogledaš kako se deklerira strukturo ti bo naloga mačji kašelj. Una funkcija ti pa tud nebi smela delat problemov, pač zračunaš ploščino obeh krogov in pogledaš kera je večja.

Ne vem točno kaj rabš, mislm jst ti to lahk napišem, sam kaj boš meu od tega? Naloga je res zlo preprosta, tko da predlagam, da mal pogooglaš in sam dekleriraš strukturo. Lp
http://upor.blogec.si
http://bozjak.deviantart.com

Makina ::

Profesor je bil dons neki razjarjen, pa je mau naloge nam nametu.
Trisixty s kombajnom bočno.

Tutankhamun ::

struct KROG
{
	double r;

	bool operator== (KROG &krog)
	{
		if (krog.r == r)
			return true;
		return false;
	}
	bool operator< (KROG &krog)
	{
		if (krog.r > r)
			return true;
		return false;
	}
	bool operator> (KROG &krog)
	{
		if (krog.r < r)
			return true;
		return false;
	}
	bool operator<= (KROG &krog)
	{
		if (krog.r >= r)
			return true;
		return false;
	}
	bool operator>= (KROG &krog)
	{
		if (krog.r <= r)
			return true;
		return false;
	}
	bool operator!= (KROG &krog)
	{
		if (krog.r != r)
			return true;
		return false;
	}
};


KROG KrogA, KrogB;
KrogA = 3;
KrogB = 4;

if (KrogA == KrogB) 
     cout << "Kroga sta enaka" << endl;


Neki u tem stilu.

Al pa tko kot ti hočeš.

struct KROG
{
 double r;
}

bool staKrogaEnaka (Krog &a1, Krog &a2)
{
   if (a1.r == a2.r) return true;
   return false;
}

KROG KrogA, KrogB;
KrogA = 3;
KrogB = 4;

if (staKrogaEnaka (KrogA, KrogB))
    cout << "Kroga sta enaka" << endl;
AMD Phenom QUAD 9950 Black Edition, 8GB

stindeee ::

Pozdrav.
Naredu sem neki kode, da ti ko pritiskas izpisuje asciii stevilke. No jaz tega ne rabem, ampak da naprimer pritisneš a in izpiše 1, b ->11,c->111, isto kot pri mobitelu. Pač obratno.
Zdej naredil sem switch, ampak samo enkrat case izberem in ne morem več. Neznam naredit, da se bi switch ponavljal nato, ko bi pritisnil npr. enter končal switch. Potem moram narediti pa še obratno, da pišem številke notri in nato pridejo ven črke, spet isti princip mobitela. Zdej neki sm zgeneriral kode, ampak mi napiše neveljavna html oznaka. Mogoče zato, ker sem malo R. :8)
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{    
     char tipka;
     cin>>tipka;                  

     switch(tipka) {
             case 'a': cout<<"1";break;

             case 'b': cout<<"11";break;

             case 'c': cout<<"111";break;

             case 'd': cout<<"2";break;

             case 'e': cout<<"22";break;

             case 'f': cout<<"222";break;

             case 'g': cout<<"3";break;

             case 'h': cout<<"33";break;
                                                             
             default : {}break;
             }                            
    while(tipka != '\x1b') //x1b = ESC tipka
    { 
        tipka = getch();
      cout<<tipka;
      }



    
    system("Pause");
    return 0;    
}

Zgodovina sprememb…

  • spremenilo: stindeee ()

Vesoljc ::

preberi si sticky teme v oddelku, tam pise kako prilepit kodo
Abnormal behavior of abnormal brain makes me normal...

bozjak ::

stindeee: vse skupaj daj v do whiel zanko.

primer:

do {
cin >> tipka;
switch (tipka) {
case ...
} while (tipka != ESC);

Ubistvu si že sam naredil to zanko, le nekoliko narobe si jo zastavil. Case stavek mora biti v zanki, da ga bos veckrat ponavljal...

LP
http://upor.blogec.si
http://bozjak.deviantart.com

Volk| ::

Haj
Jaz se pa ubadam z binarnim drevesom.
Kode je sicer polno na netu, toda je ne razumem. Ta rekurzija je ful vredi stvar, toda tudi zajebana za razmislit.
V debagerju se zgubim....

bozjak ::

Volk|: ne vem sicer katerega dela kode ne razumes, zato bom probal pojasniti delovanje binarnega drevesa in upam da ti bo po tem delovanje kode kaj bolj jasno. Ce ne, pa zastavi bolj konkretno vprasanje.

Pri binarnem drevesu je uporabljena rekurzija, ker mores iz vsakega elementa seznama pot nadaljevati v oba naslednja elementa in tako naprej. Rekurzija s pomocjo zaustavitvenega pogoja deluje tako, da najprej nadaljuje pot do konca seznama, nato pa v obratnem vrstnem redu opravi tisto, kar si v funkciji zapisal (pa naj bo to iskanje ali pa izpis vsakega podatka).

Seveda sta si rekurzija in iteracija enakovredni, torej vse akr lahko naredis z rekurzijo lahko naredis tudi iterativno, a splosno pravilo je, da se pri drevesnih strukturah uporablja, lazjo, rekurzijo.

Značilnost binarnega drevesa je ta, da se drevo iz vsakega elementa "razširi" v 2, zato moraš tudi rekurzijo zastaviti tako.

Mislim, da sem povzel osnove. Če kode še vedno ne razumeš, zastavi bolj konkretno vprašanje in poskušal ti bom pomagati.

Lp
http://upor.blogec.si
http://bozjak.deviantart.com

stindeee ::

@ božjak
Zdej tisto dela, kak pa nrdim, da bom lahk tku 1x1=a, 2x1=b. V switchu to ne gre ne?

Lp

gtu ::

kako naredim tabelo stringov?
poskušal sem tako: (seznam sedmih stringov)
string nizi[7];

napaka:
`string' undeclared (first use this function)


potem še takole:
char nizi[][];

napaka:
declaration of `nizi' as multidimensional array must have bounds for all dimensions except the first


potem še takole:
char nizi[][7];

napaka:
storage size of `nizi' isn't known


kakšna ideja?

Zgodovina sprememb…

  • spremenil: gtu ()

napsy ::

c++ ima nize implementirane v std imenskem prostoru. Kar pomeni, da moraš narediti sledeče:

1. vstavi zaglavje string
#include <string>


2. ustvari polje nizov tipa std::string sledeče:
std::string nizi[7];
"If you die, you die. But when you live you live. There is no time to waste."

SynTax64 ::

Da si vse skupaj še bolj poenostaviš dodaj pod zaglavjem dodaj:
using namespace std;


Potem lahko uporabiš kodo kot ti je predhodnik rekel v tem primeru :
#include <string>
using namespace std;

{
string nizi[7];
//...
}

gtu ::

uf, hvala vam, jaz sem pa tako vestno brisal tisto "nepotrebno" vrstico pred main funkcijo (:D)
ni lahek prehod iz jave na c ;)

napsy ::

to je c++ in ne c. Pa ni priporočljivo uporabit using namespace, saj za iostram, ker je precej velika zbirka.
"If you die, you die. But when you live you live. There is no time to waste."

klemen93 ::

Sem začetnik pri programiranju in sem se za vajo določil napisati nekakšen macro recorder ki si zapolni kako se je miška premikala po zaslonu.
Vendar sem naletel na težavo pri izvajanju programa, saj ga noče zagnati in mi javi napako da je program prenehal delovati.

#include <iostream.h>
#include <windows.h>
#include <dos.h>
int main()
{
	int tab[100000][2];
	int x, y, st=0;
	
	cout<<"\nPritisnite SHIFT ko želite začeti snemanje pot miške!";
	cout<<"\nPritisnite ESC ko želite da prenehati snemati pot miške!";
	

	
	if(GetAsyncKeyState(VK_LSHIFT))
	{
		POINT pos;
        GetCursorPos(&pos);
		x=pos.x;
		y=pos.y;
		tab[st][0]=x;
		tab[st][1]=y;
		for( ; ; )
		{
			POINT pos;
			GetCursorPos(&pos);
			
			if(GetAsyncKeyState(VK_ESCAPE))
			{
				exit(0);
			}
			if(st>99999)
			{
				exit(0);
			}
			
			if(pos.x!=tab[st][0] || pos.y!=tab[st][1])
			{
				st++;
				tab[st][0]=pos.x;
				tab[st][1]=pos.y;
			}
		}
	}
}


Zavedam se da je koda izjemno slabo napisana, saj se z programiranjem ne ukvarjam preveč dolgo.
Za vsak odgovor se vam zahvaljujem :)

napsy ::

Namesto GetCursorPos poskusi uporabit GetCursorInfo (http://msdn.microsoft.com/en-us/library.... GetCursorPos() neke težave.
"If you die, you die. But when you live you live. There is no time to waste."

W3by ::

Verjetno je problem tudi, ker je tvoja tabela prevelika za Stack pomnilnik (Stack overflow) (več si preberi Tukaj)

Namesto tabele ti predlagam, da uporabiš vektor (bolj enostavno za implementacijo), lahko pa uporabiš tudi 2d tabelo ter operatorja new in delete (malce pogooglaj).

klemen93 ::

Hvala za odgovora. Po tem ko sem zmanšal tabelo na 1000 mest sem končno lahko izvedel program, torej je bila res težava v velikosti tabele. Z veseljem pa si bom prebral tudi več o tem kar si napisal W3by.

Zgodovina sprememb…

  • spremenil: klemen93 ()

fx ::

Mene zanima zakaj mi program ko v terminal vnesem :
$ g++ -c -I /usr/include/mysql my_mysql.cpp && g++ -o my_mysql my_mysql.o -L /usr/include/mysql/ && ./my_mysql

Vrne naslednje :
my_mysql.cpp: in Tunction 'int main()' :
my_mysql.cpp:21: warning: deprecated conversion from string constant to 'char*'
my_mysql.cpp:22: warning: deprecated conversion from string constant to 'char*'
my_mysql.cpp:23: warning: deprecated conversion from string constant to 'char*'
my_mysql.cpp:24: warning: deprecated conversion from string constant to 'char*'
Seqmentation fault

Kodo ki pa jo prevajam in poganjam pa je naslednja :
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <mysql.h>

int main(){
  
  MYSQL *conn;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *server = "localhost";
  char *user = "root";
  char *password = "geslo";
  char *db = "test";
  const char *sqlquery;

  std::string podatek, data1, data2;

  if (!mysql_real_connect(conn, server, user, password, db, 0, NULL, 0)) {
     cout << mysql_error(conn);
     return 0;
  }else{
  
    std::cin >> data1;
    std::cin >> data2;	

    podatek = "INSERT into ime_tabele (stolp_1, stolp_2) VALUES (' "+ data1 +" ',' "+ data2 +" ')";
    sqlquery = podatek.c_str();	
    
    if(mysql_query(conn,sqlquery)){
      std::cout << mysql_error(conn);
      mysql_free_result(res);
      mysql_close(conn);
      return 0;
    }
  }
  mysql_free_result(res);
  mysql_close(conn);
  return 0;
}


Podatkovna baza in vse je tako kot mora bit, ker sem jo naredil preko phpmyadmina.

Hvala,

fx

BigWhale ::

Pred prvim if stavkom ti manjka:

conn = mysql_init(NULL);

fx ::

BigWhale je izjavil:

Pred prvim if stavkom ti manjka:

conn = mysql_init(NULL);


BigWhale hvala.

Sedaj me zanima, kje delam narobe namreč prevajalnik mi javi naslednjo napako :
debarm:/flash/cpp/default# make -f Makefile
g++ -c -Wall ../main.cpp -o main.o
g++ -c -Wall ../gpio.cpp -o gpio.o
g++ -c -Wall ../riset.cpp -o riset.o
g++  main.o gpio.o riset.o -o azimut
riset.o:(.bss+0x0): multiple definition of `ura'
main.o:(.bss+0x0): first defined here
riset.o:(.bss+0x18): multiple definition of `azimut'
main.o:(.bss+0x18): first defined here
collect2: ld returned 1 exit status
make: *** [azimut] Error 1
debarm:/flash/cpp/default#

main.cpp :
#include "gpio.h"
#include "riset.h"
int main()
{
 return 0;
}
riset.h
#ifndef _RISET_H_
#define _RISET_H_
struct Ura{
	double vzhod;	
	double zahod;
	double dolzina;
}ura;
struct Azimut{
	double vzhod;
	double zahod;
	double fi_sonca;	// 	azimut sonca
	double alfa_sonca;	//	kotna višina sonca oz. sonce nad obzorjem 
	double fi;
}azimut;
#endif

riset.cpp
#include <cmath>
#include "riset.h"

gpio.h in gpio.cpp sta narejeni po istem koputi samo da niso uporabljeni struct.
Makefile :
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=../main.cpp ../gpio.cpp ../riset.cpp
OBJECTS=main.o gpio.o riset.o
EXECUTABLE=azimut

all: $(SOURCES) $(EXECUTABLE)

main.o: ../main.cpp
	$(CC) $(CFLAGS) $< -o $@

gpio.o: ../gpio.cpp
	$(CC) $(CFLAGS) $< -o $@	
	
riset.o: ../riset.cpp
	$(CC) $(CFLAGS) $< -o $@

$(EXECUTABLE): $(OBJECTS) 
	$(CC) $(LDFLAGS) $(OBJECTS) -o $@


Če vse funkcije dam v main.cpp in preveden pa zadeva deluje, samo pa za programiranje je nepregledna.
Lep pozdrav,

fx

kow ::

V header datoteki imaš definicijo strukture. In ta header "includaš" v 2 prevajalnih enotah. V headerju samo deklariraj strukturi (izbriši 'ura' in 'azimut').

Isotropic ::

a je c++x0 ze dokoncan standard? ze kaj podpirajo kompilerji nove feature?

fx ::

Sedaj vidim da sem pozabil omeniti da riset.cpp kliče tudi te dve strukturi in nato main.cpp ju prikazuje na zaslon.
primer riset.cpp
#include "riset.h"
void SunAzimut(void){
  double alfa = 29.53;
  azimut.alfa_sonca = alfa;
}

fx ::

Našel rešitev :D.

riset.h
#ifndef RISET_H
#define RISET_H
struct Ura{
	double vzhod;	
	double zahod;
	double dolzina;
};

struct Azimut{
	double vzhod;
	double zahod;
	double fi_sonca;	// 	azimut sonca
	double alfa_sonca;	//	kotna višina sonca oz. sonce nad obzorjem 
	double fi;
};
void SunAzimut(Azimut& azimut, Ura& ura);
#endif

riset.cpp
#include <cmath>
#include "riset.h"
void SunAzimut(Azimut& azimut, Ura& ura){
  double alfa = 29.53;
  azimut.alfa_sonca = alfa;
}

main.cpp
#include "riset.h"
Azimut azimut;
Ura ura;

int main(){
 
 std::cout << SunAzimut(azimtu, ura) << std::endl;
 return 0;
}


Hvala za pomoč.

kow ::

Nobene potrebe ni po globalnih spremenljivkah. Azimut in Ura lahko definiras v funkciji main.

fx ::

Napisal sem dva programa v C++ za Unix/Linux.
Prvi program mi omogoča, da pošiljam in sprejemam podatke preko UDP-ja.
Drugi program mi omogoča, da pošiljam in sprejemam podatke preko serijske komunikacije.
Zadeva ločeno deluje, ampak pri vsakem programu je problem, da delujete po sistemu pink-pong žogice. Ampak do sedaj ko sem posamično ju pisal ni bil taki problem.
Problem je sedaj ,ko želim oba programa združit v en (torej želim narediti vmesnik RS232-LAN, ki v primeru ene ali druge komunikacije vse prejete podatke shrani začasno na disk) program, ki bi delo po sistemu FIFO. Podatki ki prvi pridejo noter gredo potem prvi naprej ven.
Sedaj me zanima kako oz. na kakšen način lahko to zadevo rešim.

Hvala
Lep pozdrav,

fx

aljazko1995 ::

Dober dan

Imam en problem,ki ga moram rešiti do jutri.
IN sicer napisati moram program v dev c++, ki prejme 10 naključnih vnesenih imen ter jih razvrsti po abecedi!

Prosim da mi nekdo pomaga!
««
9 / 9
»
»»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program za C++ jezik

Oddelek: Programska oprema
232767 (1802) popaj113
»

Kako bi naredil en ultra simple programček?

Oddelek: Programiranje
492218 (1499) AtaStrumf
»

C++ & XP

Oddelek: Programiranje
241566 (1173) Exilian
»

C++ in pavza

Oddelek: Programiranje
161150 (911) napsy
»

c++ datoteke

Oddelek: Programiranje
463819 (3308) Vesoljc

Več podobnih tem