Hirdetés
- Akciófigyelő - Epic Store ajándékozás 7. nap: Control
- Akciófigyelő - Epic Store ajándékozás 6. nap: Dredge
- 2024 - Békés, boldog karácsonyt kívánunk minden olvasónknak!
- Akciófigyelő - Epic Store ajándékozás Dark and Darker: Legendary Status
- Jövőre érkezik az új Agatha Christie: Death on the Nile játék
Új hozzászólás Aktív témák
-
mgoogyi
senior tag
válasz Jhonny06 #698 üzenetére
Nálam semmi hibaüzi nincs, visual studio + winXP.
Annak, hogy something.nev semmi értelme, mert a something az egy tömb, neki nincs olyan mezője, hogy nev. A something struktúrák tömbbje, a tömbnek van [i.] eleme, ennek az i. elemnek vannak mezői, mert ez a struktúra. Valahol nagyon kavarhatsz vmit.
Miért nem jó neked, ha azt írod, hogy something[változó].nev???[ Szerkesztve ]
-
Jhonny06
veterán
Ja a cím szerinti átadás világos, elsőre azt hittem, hogy valami komolyabbról van szó (ezt most úgy mondtam, mintha akkora májer lennék, mindegy ).
Lefuttatom az általad bemásolt kódot és ugyanaz a hibaüzi, nem adhatsz meg csak simán something-et osztálynak, mert egy array-be vannak, mindenképpen ott kell lennie a [ ]-nek. Szerintem ez az egész alapvetően nem alkalmas arra, amit szeretnék, mert bárhogy próbálom, mindig ugyanahhoz a hibához lyukadok ki.
Azt kellene megvalósítanom, hogy miközben végigmegy a sorokon (pl. for szerkezettel) kilistázza azoknak a soroknak a neveit, amikben a szám == 2, például.
Tehát hiába hozok létre egy változót mondjuk 2 értékkel és írom be a tömbbe, pl.: something[változó].szam, mert utána nem írhatom azt, hogy something.nev, ez egy ördögi kör.
[ Szerkesztve ]
-
mgoogyi
senior tag
válasz Jhonny06 #694 üzenetére
Egyrészt ezt így próbáld ki, nekem így simán működik:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>using namespace std;
struct example
{
int day;
string name;
};typedef example array[5];
int load(int& counter, array something);
int write(array something);int main()
{
int counter;
array something;
load(counter, something);
write(something);getc(stdin);
return 0;
}int load(int& counter, array something)
{
ifstream file;
file.open("file.txt");
file >> counter; //<- #2 PROBLEM
for(int i=0; i<counter; i++)
{
file >> something.day;
file >> something(i).name;
cout << something(i).day << " " << something(i).name << endl;
}
file.close();
return 0;
}int write(array something)
{
int one=1;
if(something[one].day)
cout << something[one].name; //<- #1 PROBLEM
/*else
continue;*/
return 0;
}Referencia, cím, stb:
ha van egy tömböd, pl. int tomb[5];
akkor ha csak simán ezt írod le, hogy pl(sorry a c-s kiíratásért, én azt szeretem):
printf("%d",tomb); -> a tömb memóriacíme
tomb[0] -> a tomb memóriacíménél lévő int elem
tomb[1] -> a tomb címéhez képest egy inttel arrébb lévő elem
tomb[2] -> a tomb címéhez képest két inttel arrébb lévő elemtomb + 0 -> a tomb első elemének, avagy a tömbnek a memóriacíme
tomb + 1 -> a tomb második elemének a címe*(tomb + 0) -> a * rámutat a zárójelben lévő címre, azaz az ottani int értéket jelenti
az és(&) jel több dologra jó, most kettőre térek ki:
1. Cím lekérése
van egy ilyen változód, hogy:
int i = 5;
&i ennek az i változónak a címét jelenti a memóriában.
Ha pointerezel: *(&i) az i címére mutató pointer, tehát maga az i.2. Referencia (nem tudom milyen nyelvekben vagy jártas, pascalban pl. ez a var kulcsszó, ill. sok nyelvben meg mindig referencia szerinti átadás van, mint pl. java - persze vannak kivételek
int i = 5;
int & j = i; // az i "álneve" vagy "aliasa" j leszitt a j egy és ugyanaz a változó, mint az i, tehát ha ezt csinálod, hogy
j = 6;
akkor az i is 6 lesz, mivel a két változó ugyanaz, csak két különböző néven tudod őket elérni.ha van egy függvény, ami referenciát vár, pl:
void inc (int & j) {
j++;
}int i = 5;
inc (i);akkor ennek a függvénynek a paramétere egy alias lesz i-re, tehát ha a függvényben megváltoztatod j-t, azzal i-t változtatod. Szal a referencia arra van általában, hogy a bemeneti paraméter kimeneti is lehessen ill. még azért használják, mert ez egy dereferált pointer a beadott paraméterre és ha az a paraméter nagyobb helyet foglal, mint egy pointer, akkor nem kell lemásolni a beadott értéket az újonnan létrehozott ugyanolyan nagy paraméterváltozóba. Ha az utóbbi félmondatot még nem érted, nem nagy gond.
Szóval te egy függvénynek átadtad referenciaként egy tömb címét. Ezt a címet te nyilván nem akarod megváltoztatni, mert akkor a memóriában ki tudja honnan olvasnál be dolgokat.
Kíváncsi vagyok, hogy ebből mit értettél meg... -
-
Jhonny06
veterán
1. Azt a példát csak gyorsan összedobtam, azért vannak felcserélve, véletlenül.
2. Ezt kifejthetnéd bővebben.A dinamikus tömbökről már korábban tanultam, csak most még nem jut eszembe használni, de kipróbálom így is.
A something.day viszont továbbra sem működik, mert alapvetően így olvastam be ugye az adatokat, hogy something[i].day, tehát dob egy szokásos hibaüzit, hogy .day must have a class/struct/union, tudod. Vagy ezt már a dinamikus tömbökkel kéne és menni fog?
A continue egy korábbi while-ból véletlenül maradt bent, figyelmetlen vagyok.
[ Szerkesztve ]
-
mgoogyi
senior tag
válasz Jhonny06 #692 üzenetére
Szia,
Első körben két problémát látok:
1, Write() meg Load() függvényeknek fordított sorrendben kéne lennie, mert egy inicializálatlan arrayből nem tudom mit akarsz kiíratni.
2, A Load()-ban a második paramétert tök felesleges referenciaként átadni, nem a tömb címét írod át, hanem a memóriacímen lévő adatokat piszkálod. Ha ez nem világos, amit írtam, akkor bővebben kifejtem. (Referencia helyett inkább const lenne a logikus szvsz.)Még most talán lényegtelen, amíg az alapok nem mennek, de dinamikusan kéne a tömböt lefoglalni menet közben, mert nem tudni, hány sor lesz a fájlban. Ezt így tudod megtenni, hogy: example * tomb = new example[n]; ahol n-et a fájl első sorából olvasod be. Bár ha dinamikusan foglalod le, akkor értelmet nyer a referencia, mert akkor a függvényen belül derül ki a címe. Felszabadítás pedig: delete [] tomb;
Ha pl. azokat a neveket akarod kinyerni, amelyeknél 2 van a név előtt, akkor egy for ciklus a tömbbön és ha if (something.day == 2) cout << something(i).name << endl;
Még valami:
Azzal a continue-val mit akartál elérni a végefelé??[ Szerkesztve ]
-
Jhonny06
veterán
Sziasztok!
Egy fájlból kéne kiolvasnom adatokat, soronként tartalmaz mondjuk egy számot és egy nevet, az első sorban a sorok száma, pl:
5
1 Aladar
2 Peter
2 Aniko
3 Erno
1 TiborAddig eljutottam, hogy beolvasom az adatokat és ki tudom íratni, hogy n-edik sorban milyen szám vagy név van. Viszont összetettebbek már nem mennek, például, hogy azokat a neveket irassam ki, amely sorokban a szám=1. OK, létrehozok egy változót 1-es értékkel, tömbbe pl. mintatömb[változó].név és végigmegyek mondjuk for-al a sorokon, akkor ki tudom listázni, hogy milyen nevek vannak, de ennek jelen pillanatban nem sok hasznát veszem, tehát az alapok mennek. De ha mondjuk már megvan a szám, akkor azt nem tudom, hogy annak a sornak a neveit irassa ki, mert ugye a tömbbe is kell valamit írni, így hibát kapok: mintatömb[].név. Lehet, hogy nem struct-al kéne megoldani ezt?
[ Szerkesztve ]
-
Mr. Teddy
őstag
Sziasztok!
Egy kérdésem volna.
Van egy fájlom, amit binárisan egy char[] tömbbe beolvasok.
A fájlom bájtokat tartalmaz. Bizonyos méret felett azonban negatív értéknek veszi.
Pl. tartalmazza ezt a fájlom: 6C 18 0 43 92 EC
majd beolvasás, majd kiirítás utána az első 4 érték helyes, a többi: FFFFFF92, FFFFFFEC, tehát pont "mínusz" mint a szám.Ötlet?
Kösz! -
mgoogyi
senior tag
#include "fifo.h"
#include<stdio.h>FiFo:iFo()
{
elementNum=0;
pData=0;
}FiFo:iFo(const FiFo&theOther)
{
if(theOther.elementNum==0)
{
elementNum=0;
pData=0;
}
else
{
elementNum=theOther.elementNum;
pData=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pData=theOther.pData(i);
}
}
}FiFo::~FiFo()
{
if (pData) {
delete [] pData;
pData = 0;
}
}double FiFo::get()
{
if (elementNum==0) {
return 0;
}if(elementNum==1)
{
double element=pData[0];
if (pData) {
delete [] pData;
pData = 0;
}
elementNum=0;
return element;
}
elementNum--;
double element=pData[0];
double*pTemp=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pTemp(i)=pData[i+1];
}
if (pData) {
delete [] pData;
pData = 0;
}
pData=pTemp;
return element;
}bool FiFo::put(double element)
{
double*pTemp=new double[elementNum+1];
elementNum++;
for(int i=0;i<elementNum-1;i++)
{
pTemp(i)=pData(i);
}
pTemp[elementNum-1]=element;
if (pData) {
delete [] pData;
pData = 0;
}
pData=pTemp;
return true;
}bool FiFo::empty()
{
elementNum=0;
if (pData) {
delete [] pData;
pData = 0;
}
return true;
}Alapból a destruktorban szállt el, hiszen a get()-nél mikor kivetted az utolsó elemet, már felszabadítottad a pData-t, a destruktor pedig még1x megpróbálta ezt megtenni.
-
papa019
senior tag
válasz Jester01 #685 üzenetére
Oké. Megfogadom a tanácsaid.
A nem fut le normálisan alatt azt értem, hogy a copy konstruktor használata esetén a cmd megállt futás közben, illetve amikor a destruktor nem volt kikommentezve, akkor is tapasztaltam ezt a jelenséget.
ez a main.cpp tartalma:
#include "fifo.h"
#include<stdio.h>
void main(){
FiFo valami;
valami.put(3.14);
valami.put(6.14);
valami.put(1.23);
valami.put(7.23);
valami.put(6.79);
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
/*FiFo valami1(valami);
FiFo valami2=valami;
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());*/
}Köszönöm a sok segítséget, megpróbálom kijavítani a tanácsaitok alapján.
Ezt a pData=0-t így tanítják nekünk az egyetemen... :S Eddig én is NULL-t használtam, aztán a gyakvezérünk minden programot 0-val írt fel :SA tömb újrafoglalgatása azért van, mert most kezdtünk bele a nyelvbe és még nem bonyolítjuk láncolt listával. (én meg inkább a gyakorlati anyag alapján írom meg a házimat
Mégegyszer köszönöm a hozzászólásokat.
Ha esetleg lesz valaki, aki megnézi a programom a main.cpp-vel, és úgy talál valami hibát benne, akkor kérem értesítsen. -
Jester01
veterán
Nem működő programok esetén
1) használj debuggert
2) használj memória-hozzáférés ellenőrzőt (valgrind)
3) mondd meg pontosan milyen bemenetre milyen hibát ad, vagy mennyiben nem várt eredményt (a "nem fut le normálisan" nulla információ)
4) teljes, futtatható programot postolj, hogy mi is ki tudjuk próbálni (ebben ugye nem volt main)Jester
-
mgoogyi
senior tag
Ha bármely két pont között akarsz pontosan egy irányítatlan szakaszt, akkor az ennyi:
for (int i=0; i<N; i++) {
for (int j=i+1; j<N; j++) {
lineto (i, j);
}
}Bár nem tudom, hogy megy ez a lineto...
Ha két lineto kell egy szakaszhoz úgy, hogy először a kezdőpontot adod meg, aztán a végpontot, akkor a belső ciklusban két lineto kell így:for (int i=0; i<N; i++) {
for (int j=i+1; j<N; j++) {
lineto (pont(i).x, pont(i).y);
lineto (pont[j].x, pont[j].y);
}
}(/I) -
doc
nagyúr
Meg engem eléggé zavar, hogy pData=0; -t használsz pData=null; helyett.
ezzel en is sokaig igy voltam C -> C++ valtas utan, de a '0' a C++ 'standard', es egy ideje mar en is igy hasznalom (bar valoban nem kimondottan logikus, a NULL sokkal jobban leirja hogy mi is tortenik a mutatoval mint egy sima numerikus ertek) -
mgoogyi
senior tag
1, Ha csinálsz egy olyat, hogy
delete pData; akkor csináld így:
if (pData!=null) {
delete pData; pData = null;
}Ha úgy próbálsz felszabadítani, hogy a pData-t már egyszer felszabadítottad, el fog szállni futás közben, ezért a null-ra állítással jelzed magadnak, hogy felszabadítottad-e vagy sem.
Meg engem eléggé zavar, hogy pData=0; -t használsz pData=null; helyett.
2, A get()-nél nem ellenőrzöd, hogy elementNum elérte-e a nullát, mert ha igen, akkor a pData[0]-tól semmi jót ne várj.
3, az empty()-nél is ez kéne:
if (pData!=null) {
delete pData; pData = null;
}4, Nagyon nem hatékony, hogy minden egyes beszúrásnál és törlésnél újrafoglalod a tömböt meg átmásolgatod az elemeket. Célszerűbb lenne egy oda-vissza láncolt lista.
Remélem tudtam segíteni! Ha null-t Null-nak vagy NULL-nak kell itt írni, akkor sorry, mostanában inkább java-zok...
-
papa019
senior tag
Sziasztok!
Valaki segítsen nekem legyen szíves.
Megírtam egy fifo osztályt, de valami probléma van, mert a program nem fut le normálisan, annak ellenére, hogy minden hiba nélkül lefordul.fifo.h
#ifndef fifo_h
#define fifo_h
class FiFo{
int elementNum;
double*pData;
public:
FiFo();
FiFo(const FiFo&theOther);
~FiFo();
double get();
bool put(double element);
bool empty();
};
#endiffifo.cpp
#include "fifo.h"
#include<stdio.h>
FiFo::FiFo()
{
elementNum=0;
pData=0;
}
FiFo::FiFo(const FiFo&theOther)
{
if(theOther.elementNum==0)
{
elementNum=0;
pData=0;
}
else
{
elementNum=theOther.elementNum;
pData=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pData[i]=theOther.pData[i];
}
}
}
FiFo::~FiFo()
{
delete[]pData;
}
double FiFo::get()
{
if(elementNum==1)
{
double element=pData[0];
delete[]pData;
elementNum=0;
return element;
}
elementNum--;
double element=pData[0];
double*pTemp=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pTemp[i]=pData[i+1];
}
delete[]pData;
pData=pTemp;
return element;
}
bool FiFo::put(double element)
{
double*pTemp=new double[elementNum+1];
elementNum++;
for(int i=0;i<elementNum-1;i++)
{
pTemp[i]=pData[i];
}
pTemp[elementNum-1]=element;
delete[]pData;
pData=pTemp;
return true;
}
bool FiFo::empty()
{
elementNum=0;
pData=0;
return true;
}Mi lehet a baj?
Előre is kösz.
Üdv.: Papa019[ Szerkesztve ]
-
Jhonny06
veterán
válasz WonderCSabo #679 üzenetére
Huh, köszönöm a gyors választ!
-
WonderCSabo
félisten
válasz Jhonny06 #678 üzenetére
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int a;
int b;
int c;
string vez;
string ker;
string nev;
fstream f;
f.open("valami.txt");
f>>a>>b>>c>>vez>>ker;
nev=vez+" "+ker;
cout << a << endl << b << endl << c << endl << vez << endl << ker << endl <<nev;
f.close();
return 0;
}[ Szerkesztve ]
-
Jhonny06
veterán
Sziasztok!
Egy külső forrást (.txt) kellen beolvasni, aztán kiírni belőle tetszőleges adatokat. Ezzel nem is lenne probléma.
Tegyük fel, hogy ilyen sorokkal van tele a txt:
1 2 3 vezetéknév keresztnév
Az első 3 adatot simán beolvasom minden sorból, a 4. és 5.-el viszont gondba vagyok. El tudnám tárolni 4.-nek egy tetszőleges változóba, de ugye a 4. csak a vezetéknév és nekem a vezetéknevet és keresztnevet egybe kellene tudnom kilistázni, egy változóba. C#-ből ugye ismerjük az összevonó operátort, csak azt se nagyon tudnám használni ilyen formában, mivel a változó kiiratásakor kéne lennie egy szóköznek a vezetéknév és a keresztnév között. Meg lehet ezt valahogy oldani? Köszi.
-
Lakers
tag
Hello!
Megoldandó probléma az lenne, hogy minden ponthoz húzni kéne egy egyenest... Valószínűleg a belső ciklusommal van a baj..., mert az csak annyit csinál, hogy az utolsó pontnál húz egy vonalat mindegyik pontba, kivéve az elsőhöz, arra szolgál az utolsó sor. Természetesen ha egyszer már egy átló megvan húzva, akkor nem kéne hogy az mégegyszer megismétlődjön, de arról lővésem sincs, hogyan kéne.
[code]
for (int i=0;i<N;i++)
{
lineto(int (pontok.x), int (pontok(i).y));
for(int j=i+1; j<N; j++)
{
lineto(int (pontok[j].x), int (pontok[j].y));
}
}lineto(int (pontok[0].x), int (pontok[0].y));
Ezzel a résszel akadtak problémáim[/code]
-
Tussky
tag
Sziasztok!
Hogy lehetne azt megoldani,hogy a program egy megadott elérési útról is megtudja nyitni a filet ?
Tehát pl.: nem azt adom meg bemenetnek,hogy valami.txt hanem hogy C:\itt\ott\valami.txt
Nem a szétbontással van a gondom,azt megtudom csinálni,hanem azzal,hogy a program így is lefusson,azaz a megadott elérési útnak megfelelően futtassa a filet.
Előre is köszönöm a válaszokat!
-
j0k3r!
senior tag
válasz nepszter1 #672 üzenetére
hello!
sajnos nincs most elottem c fejlesztokornyezet, de en igy csinalnam:
- bekernek az usertol egy szamot ellenorzotten (1 - ko, 2 - ollo, 3 - papir)
- aztan a randomolnek 1 es 3 kozott egy szamot, ami a gep valasztasa lesz
- osszehasonlitanam a 2 erteket
- aztan kiirnam ki nyert, esetleg ha tobb "menetes", akkor egy userpont, computerpont valtozokban tarolnam az eddig gyozelmek szamatremelem tudtam segiteni.
some men just wanna watch the world burn...
-
nepszter1
addikt
üdv, kellene egy kis segítség valahogy kő-papír-olló-t el kellene készíteni switch-case segítségével de sehogy se jövök rá.
-
Tussky
tag
Sziasztok!
Van egy függvényem,ami egy fileból kiolvas adatokat,az ott található értékeket alakítja át double értékké,ezeket berakja egy tömbe és ezeket az értékeket adja vissza visszatérési értékként.
A dolog teljesen jól működik a függvényen belül,amint azonban meghívom a függvényt érdekes visszatérési értékeket kapok.
Értsd:
ilyen formában vannak a számok pl 10.240 viszont amikor a függvényt meghívom,akkor mindig 1.31223+e09 és hasonló formátumba dobálja vissza.Van ötletetek,hogy ezt hogy lehetne megoldani,mert én egyenlőre nem találtam semmit.Előre is kösz a válaszokat!
Üdv!
-
labuwx
tag
Sziasztok!
Meg tudnátok mondani, hogy miként kell használni ezt a függvényt, ha lpt portra akarok kiírni ill. onnan olvasni?
Egy egyszerű byte kiírásos, olvasásos példának nagyon örülnék.[ Szerkesztve ]
-
Drizzt
nagyúr
Ja tényleg, elég nagy. Viszont láttam egy kollégánál, s attól nagyobbra emlékeztem azért. Most minden nap viszek magammal egy adag nyomtatott részt a könyvből amit linkeltem. Az a lényeg abban amit most csinálok, hogy Linux alatt legyen a lehető legjobb megoldás, platformfüggetlenség igénye nem merül fel. De már most vannak olyan részek, amik másképp vannak kezelve win alatt meg linux alatt. Jelzések, processzek, osztott memória, dinamikus könyvtárak, ilyesmi.
[link]I am having fun staying poor.
-
doc
nagyúr
egyreszt mert az a felveteseddel ellentetben rohadt nagy
masreszt meg az tanulni nem igazan jo, inkabb referencia, ha szeretned az alaptudast felboviteni, akkor rengeteget kell olvasnod belole hogy tenyleg belemelyedj. igaz, abban a konyvben minden benne van amit a C++ -rol tudni kell/lehet
a Linuxos vonatkozas megint mas, ez nem a nyelvtol fugg, hanem attol hogy milyen headereket/libeket hasznalsz. a hasznalt eszkozoket jol megvalogatva nem kell foglalkoznod azzal, hogy milyen OS van alattad, az en Qt-s es SDL-es programjaim platformfuggetlenek, az SDL-es jatekomat leforditottam mar pl. IRIX-re (Silicon Graphics) es WIZ-re (ARM procis jatekkonzol) isegyedul akkor kell komolyan foglakoznod a nyelv es az OS kapcsolataval, ha rendszerszintu fejlesztesben gondolkodsz (pl. kernelmodulok, driverek, stb), errol is van szakirodalom
-
doc
nagyúr
idehaza? vannak konyvesboltok (pl bookline talan) akik kulfoldrol hoznak be konyveket
de ha gyorsan kell, akkor marad a letoltes elektronikusan...
nem konkretan C++, de C++-os Qt programozasrol van ingyenesen elerheto konyv (pontosabban az elso kiadas letoltheto, a masodik csak papiralapon erheto el legalisan), valahol a Qt oldalan meg is van ra a link -
Drizzt
nagyúr
Valami expert, de annyira nem rohadtnagy könyvet tudtok ajánlani, amit reggel az ember a villamoson/héven tud forgatni, de azért nem cseszi fel az agyát egyórás úton? Kéne. Valami nagyon mély c++ könyv. Elsősorban Linuxos oldalról közelítve.
I am having fun staying poor.
-
.:GoliBali:.
aktív tag
Hát már próbáltam nagyon sok féleképpen, de nem igazán sikerül 1szer sem.
CB-ban kb 100szor végignéztem hogy hol lehetne ilyesmit linkelni, ahol lehetett ott linkeltem, de sehogysem akarta tudni használni:S
De próbálkozom még...#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj $/= unpack( 'H*' , $_ ); $_ = `echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1 lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
-
doc
nagyúr
válasz .:GoliBali:. #657 üzenetére
a forraskod szintjen csak annyi, hogy include-olod a szukseges .h file-okat, es hasznalod a libet
a lenyeg a linkelesnel jon, amikor is a forditonak meg kell adni a -llibraryneve kapcsolot (- kicsi L es a lib neve, pl. -lcurl)
hogy ezt pontosan hol tudod elmagyarazni neki, az IDE-tol fugg, biztos van a CB-ban is valami olyan ablak/ful ahol a hasznalando libraryket tudod megadni -
.:GoliBali:.
aktív tag
Sziasztok!
Egy kis segitséget szeretnék kérni. Még sosem csináltam ilyet, szal ugy kéne megfogalmazni a help-et
Szal a kérdésem, hogy hogyan lehet egy .lib-et használni egy C++ programban.
Jelen esetben a libcurl-t szeretném használni és Codeblocks-ot használok. Windows 7 alatt.Ha valaki le tudná irni, hogy mit hova kell linkelgetnem, azt nagyon megköszönném.
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj $/= unpack( 'H*' , $_ ); $_ = `echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1 lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
-
Jester01
veterán
Mi meg arra lettünk volna kiváncsiak, hogy milyen operációs rendszer alatt.
Linuxon mindenesetre első közelítésben inkább a parport driver által szolgáltatott ioctl-ek használata javallott. Ha pedig mindenképp közvetlen portelérés kell akkor a megfelelő jogosultságok beállítása után inline asm vagy az előre definiált in/out függvénykkel lehet elérni.Jester
-
labuwx
tag
Sziasztok!
Arra lennék kíváncsi, hogy hogyan tudok kiírni lpt portra? Az lpt port címe: 0x0378. -
Orc
senior tag
Üdv!
A segítségeteket szeretném kérni:
Lehetséges egy osztály konstans példányának az adattagjait valahogyan mégis módosítani?
Hogyan kell az osztály adattagjainak típusát módosítani, hogy azok akkor is változtathatóak legyenek, ha az osztály egy példánya így lett létrehozva:class alma
{
int a;
int b;
int db; // ezt akarom módosítani
...
{const alma a;
Remélem érthető volt.
Köszönöm:
OrcKinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!
-
Bettina87
csendes tag
Sziasztok!
Lenne egy kis problémám. Kicsit elcsúsztam a beadandómmal és legkésőbb holnap kéne leadnom. Jelenleg az elkezdéssel is bajaim vannak :S, szóval minden apró kis segítségért hálás lennék, mivel nem igazán tudom megcsinálni. Engem az itcafe-n már egyszer megmentettek, remélem most is így lesz. Előre is köszönöm
A feladat:
Írjon C++ programot éttermi menü és megrendelés kezeléséhez!
Definiáljon egy tétel osztályt, ami egy étlap egy tételéről tartalmaz információkat ( étel
vagy ital, neve, ára stb.).
Definiáljon az osztályhoz konstruktort, beolvasó, kiíró, lekérdező és módosító műveleteket. Származtasson ebből egy angol nevű utód osztályt, amely az őshöz képest pluszként a a tétel angol nevét tartalmazza.
Az osztály az ősosztály beolvasó és kiíró eljárását definiálja felül egy, a tétel angol nevét is kezelő résszel.
A tétel és az utód osztály felhasználásával írjon programot, ami az osztályok minden műveletét teszteli, valamint egy vendég által kiválasztott tételek alapján kiszámolja a fizetendő összeget!
Definiáljon a feladathoz egy bármilyen operátort és legyen a programban azt kipróbáló rész is! -
Lakers
tag
válasz Jester01 #648 üzenetére
Ennél jobb ötletem nem volt a tológatásra, na mindegy, majd mond rá valamit a gyakvezér.
lnx=lny=0;
lkx=getmaxx();
lky=getmaxy();
for (i=0; i<N; ++i)
{
if (p[i].x+u>lnx)
lnx=(int)p[i].x;
if (p[i].x+u<lkx)
lkx=(int)p[i].x;
if (p[i].x+v>lny)
lny=(int)p[i].x;
if (p[i].x+v<lky)
lky=(int)p[i].x;
}
if (lnx+u>=getmaxx()-1 || lkx<=1)
dx=-dx;
if (lny+v>=getmaxy()-1 || lky<=1)
dy=-dy;
u+=dx; v+=dy; -
donyuska
csendes tag
Sziasztok!
Nekem az lenne a problémám, hogy most kezdtem a C++ tanulását (iskolában nyomják én nem tanulnám, ha nem kellene ) és van egy beadandóm amit nem tudok megoldani, mert egy kicsit fejlettebb tudás szükséges hozzá.
Ha tudna valaki segíteni azt nagyon szépen megköszönném.
A segítséget előre is köszönöm!Feladat:
Írjon C++ programot, melyben definiál egy vektor osztályt. Az osztály adatai:
a vektor mérete (elemek száma) és a dinamikusan tárolt vektor. Definiáljon az
osztályhoz műveleteket:
-a méretet paraméterként tartalmazó konstruktort, ami a méret megadásán
kívül 0-ra is állítja a vektor elemeit!
–a vektort beolvasó és kiíró, valamint egy index-el megadott elemét módosító
eljárást
–a vektor egy elemét lekérdező függvényt
Származtasson ebből egy zh vektor osztályt, melyet úgy kell elképzelni, hogy
egy osztály N tanulója által írt zh eredményét tartalmazza, kiegészítve az N
tanuló nevével
Az osztály az ős vektorosztály beolvasó és kiíró eljárását definiálja felül egy, a
tanulók neveit is tartalmazó barátságosabb beolvasással és kiírással! Rendeljen
az osztályhoz egy összeadás operátort is, mellyel két különböző zh
osztályzatait össze tudja adni, ha ugyanazok a tanulók írták meg a zh-t,
különben legyen 0 értékeket tartalmazó zh vektor az operátor eredménye.
A zh vektor osztály felhasználásával oldja meg az alábbi feladatot: N tanuló írt
zh-t, és megadtuk az osztályzataikat. Készítsen C++ programot, amely K zh
eredményéből tanulónként meghatározza a zh-k átlagát és ebből meghatározza
kerekítéssel minden tanuló osztályzatát! Az átlagszámításhoz használja fel az
összeadás operátort! -
Lakers
tag
Sziasztok!
Van egy kockám, ami x, y, és z tengely körül forog. Ez egy view_to_windows transzformációban van megvalósítva. Viszont az is kéne, hogy teljesn képernyőn pattogjon.
Sajnos a pattogást megpróbáltam a csúcsok segítségével de nem jött össze, semmit sem csinál. Mi lehet a baj? Van valakinek rá ötlete?# include "graphics.h"
# include <conio.h>
# include <stdio.h>
#define N 7
struct lap
{
int A,B,C,D,SZIN;
};
typedef struct el
{
int A,B;
} EL;
struct box
{
pont2d MIN,MAX;
};
pont2d vvtrf(box W, box V,pont2d P)
{
pont2d Q;
Q.x=(P.x-W.MIN.x)*(V.MAX.x-V.MIN.x)/(W.MAX.x-W.MIN.x)+V.MIN.x;
Q.y=(P.y-W.MIN.y)*(V.MAX.y-V.MIN.y)/(W.MAX.y-W.MIN.y)+V.MIN.y;
return Q;
};
pont3d forgat(float a,float b,float c,pont3d P)
{
pont3d Q;
pont3d tmp;
//x tengelyre
Q.x=1*P.x;
Q.y=cos(a)*P.y+(-sin(a)*P.z);
Q.z=sin(a)*P.y+cos(a)*P.z;
tmp.x=Q.x;
tmp.y=Q.y;
tmp.z=Q.z;
//y tengelyre
Q.x=cos(b)*tmp.x+sin(b)*tmp.z;
Q.y=1*tmp.y;
Q.z=(-sin(b)*tmp.x)+cos(b)*tmp.z;
tmp.x=Q.x;
tmp.y=Q.y;
tmp.z=Q.z;
//z tengelyre
Q.x=cos(c)*tmp.x+(-sin(b)*tmp.y);
Q.y=sin(c)*tmp.x+cos(a)*tmp.y;
Q.z=1*tmp.y;
return Q;
};
pont2d centproj(int s,pont3d Q)
{
pont2d P;
P.x=Q.x*(s/(s-Q.z));
P.y=Q.y*(s/(s-Q.z));
return P;
};
pont3d metszilleszt (pont3d A, pont3d B)
{
pont3d C;
C.x = A.y * B.z - A.z * B.y;
C.y = - A.x * B.z + A.z * B.x;
C.z = A.x * B.y - A.y * B.x;
return C;
};
int main(void)
{
int u, v, lnx, lny, lkx, lky, dx=1, dy=1;
int gd,gm,page=0,i;
gd = VGA;
gm = VGAMED;
initgraph(&gd,&gm,"");
u=getmaxx()/2;
v=getmaxy()/2;
pont2d l[8],t[8];
pont3d f[8];
pont3d p[8]={{1,-1,1},
{1,-1,-1},
{-1,-1,-1},
{-1,-1,1},
{1,1,1},
{1,1,-1},
{-1,1,-1},
{-1,1,1}};
el elek[12]={{0,1},{1,2},{2,3},{3,0},{4,5},{5,6},{6,7},{7,4},{0,4},{1,5},{2,6},{3,7}};
lap lapok[6] = {{0,1,5,4,1},
{1,2,6,5,2},
{2,3,7,6,3},
{3,0,4,7,4},
{4,5,6,7,5},
{1,0,3,2,6}};
pont3d a1,n,AB,BC;;
float a=1*M_PI/180;
float b=1*M_PI/180;
float c=1*M_PI/180;
box V,W;
V.MIN.x=10; W.MIN.x=-3;
V.MIN.y=300; W.MIN.y=-3;
V.MAX.x=310; W.MAX.x=3;
V.MAX.y=10; W.MAX.y=3;
for (;;)
{
setactivepage(page);
cleardevice();
a+=1*M_PI/180;
b=c=a;
delay(10);
for (i=0; i<8; ++i)
{
f[i]=forgat(a,b,c,p[i]);
l[i]=centproj(200,f[i]);
t[i]=vvtrf(W,V,l[i]);
}
for (i=0; i<6; ++i)
{
pont2d A,B,C,D;
A=t[lapok[i].A];
B=t[lapok[i].B];
C=t[lapok[i].C];
D=t[lapok[i].D];
AB.x=B.x-A.x;
AB.y=B.y-A.y;
BC.x=C.x-B.x;
BC.y=C.y-B.y;
int poly[8] = {(int)A.x,(int)A.y, (int)B.x,(int)B.y, (int)C.x,(int)C.y, (int)D.x,(int)D.y};
//setfillstyle(INTERLEAVE_FILL,lapok[i].SZIN);
//setfillstyle(SOLID_FILL,lapok[i].SZIN);
n=metszilleszt(AB,BC); //AB × BC
a1=(pont3d)f[lapok[i].A];
if (n.x*(-1*a1.x)+n.y*(-1*a1.y)+n.z*(200-(-1*a1.z))>0)
{ setcolor(lapok[i].SZIN);
fillpoly(4,poly);
//setcolor(WHITE);
}
}
//pattogtatás
lnx=lny=0;
lkx=getmaxx();
lky=getmaxy();
for (i=0; i<N; ++i)
{
if (p[i].x>lnx)
lnx=(int)p[i].x;
if (p[i].x<lkx)
lkx=(int)p[i].x;
if (p[i].x>lny)
lny=(int)p[i].x;
if (p[i].x<lky)
lky=(int)p[i].x;
}
if (lnx>=getmaxx()-1 || lkx<=1)
dx=-dx;
if (lny>=getmaxy()-1 || lky<=1)
dy=-dy;
u+=dx; v+=dy;
setvisualpage(page);
page = 1-page;
if (kbhit())
break;
}
closegraph();
return 0;
} -
Frenky89
addikt
Hi!
Egy kis segítséget szeretnék kérni tőletek.
Van három osztályom pl.: Gyumolcs, Alma, Korte. Utóbbi kettő a Gyumolcs-ből származik.
Szeretnék egy 2D-s dinamikus tömböt csinálni, amibe Alma-kat, vagy Korte-ket rakhatok, de nem sikerült rájönnöm, hogy ezt milyen módszerrel kellene.[ Szerkesztve ]
-
bpx
őstag
válasz Gergello #636 üzenetére
igen, a friend-es sor a globális operator overload
igen, ha származtatod az osztályt, ott újra fel kell venniegy kis leírás erről: [link]
röviden: ha a bal oldali operandus nem osztály, vagy nincs a kezünkben, akkor enyhíteni kell a megszorításokon, hogy az elérje a tagváltozókat, erre jó a friend
-
Gergello
addikt
Hali!
Ez lenne a feladat:
# Legalább 1 osztályhoz tartozó és legalább 1 globális operator overloading
Az osztályhoz tatozó op overloadingot értem, de a globálist nem annyira. Mitől globális, ez? Mi lesz ha származtatom az osztályt, ott is fel kell venni egy ilyet : friend Vector operator*(int n,const Vector& v); ?
Nem igazán értem.
class Vector
{
double x;
double y;
public:
Vector(double x, double y);
Vector operator*(int n); //osztalyhoz tartoz op overloading
friend Vector operator*(int n,const Vector& v); //ez lenne a globalis?
}
Vector Vector::operator*(int n){ //osztalyhoz tartoz op overloading
Vector szorzat(this->x*n,this->y*n);
return szorzat;
}
Vector operator*(int n, const Vector& v){
Vector szorzat(v.x*n,v.y*n);
return szorzat;
}[ Szerkesztve ]
-
Trub
tag
Lenne egy kis problémám, a winsock2-vel.
Megírtam msdn-ről a próbakódot, a server, és az ügyfél részét, de nem akar működni.
Lefordul, nincs hiba. Windows 7-en nem működik megfelelően, nem bír csatlakozni az ügyfél a szerverhez, xp-n már el sem indul, mert hiányol pár dll-t, de miután ezeket pótoltam xp-n tökéletesen működik, ahogy kell.Az ügyfél:
#include <WinSock2.h>
#include <ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32")
int main(int argc,char* argv[])
{
WSADATA wsaData;
int iResult;
// Initalize Winsok
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) std::cout << "WSAStartup failed" << iResult;
//declare addrinfo
struct addrinfo *result=NULL, *ptr=NULL, hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
//get addressinfo
#define DEFAULT_PORT "27015"
iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
if (iResult != 0)
{
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
}
SOCKET ConnectSocket = INVALID_SOCKET;
// Attempt to connect to the first address returned by
// the call to getaddrinfo
ptr=result;
// Create a SOCKET for connecting to server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
}
// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR)
{
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
}
// Should really try the next address returned by getaddrinfo
// if the connect call failed
// But for this simple example we just free the resources
// returned by getaddrinfo and print an error message
freeaddrinfo(result);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Unable to connect to server!\n");
WSACleanup();
}
//sending and recieving Data on the Client
#define DEFAULT_BUFLEN 512
int recvbuflen = DEFAULT_BUFLEN;
char *sendbuf = "this is a test";
char recvbuf[DEFAULT_BUFLEN];
// Send an initial buffer
iResult = send(ConnectSocket, sendbuf, (int) strlen(sendbuf), 0);
if (iResult == SOCKET_ERROR)
{
printf("send failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
}
printf("Bytes Sent: %ld\n", iResult);
// shutdown the connection for sending since no more data will be sent
// the client can still use the ConnectSocket for receiving data
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR)
{
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
}
// Receive data until the server closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if (iResult > 0)
printf("Bytes received: %d\n", iResult);
else if (iResult == 0)
printf("Connection closed\n");
else
printf("recv failed: %d\n", WSAGetLastError());
} while (iResult > 0);
// shutdown the send half of the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR)
{
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
}
// cleanup
closesocket(ConnectSocket);
WSACleanup();
std::cin.get();
return 0;
}A server:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32")
int main(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
int iResult;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0)
{
printf("WSAStartup failed: %d\n", iResult);
}
//Define addinfo
#define DEFAULT_PORT "27015"
struct addrinfo *result=NULL,*ptr=NULL, hints;
ZeroMemory(&hints, sizeof (hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0)
{
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
}
SOCKET ListenSocket = INVALID_SOCKET;
// Create a SOCKET for the server to listen for client connections
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
}
// Setup the TCP listening socket
iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR)
{
printf("bind failed: %d\n", WSAGetLastError());
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
}
//Listening on a Socket
if ( listen( ListenSocket, SOMAXCONN ) == SOCKET_ERROR )
{
printf( "Error at bind(): %ld\n", WSAGetLastError() );
closesocket(ListenSocket);
WSACleanup();
}
//Accepting a Clientsocket
SOCKET ClientSocket = INVALID_SOCKET;
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET)
{
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
}
//Receiving and Sending Data on the Server
#define DEFAULT_BUFLEN 512
char recvbuf[DEFAULT_BUFLEN];
int iSendResult;
int recvbuflen = DEFAULT_BUFLEN;
// Receive until the peer shuts down the connection
do
{
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
printf("Bytes received: %d\n", iResult);
// Echo the buffer back to the sender
iSendResult = send(ClientSocket, recvbuf, iResult, 0);
if (iSendResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
printf("Bytes sent: %d\n", iSendResult);
} else if (iResult == 0)
printf("Connection closing...\n");
else {
printf("recv failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (iResult > 0);
// shutdown the send half of the connection since no more data will be sent
iResult = shutdown(ClientSocket, SD_SEND);
if (iResult == SOCKET_ERROR)
{
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
}
// cleanup
closesocket(ClientSocket);
WSACleanup();
std::cin.get();
return 0;
}Visual studio 2010-vel fordítom.
[ Szerkesztve ]
-
Tussky
tag
Sziasztok!
Az alábbi sort nem eszi meg a program -> tmp_xi[i+1]=tmp[i]*xi[i];.
Azt értem,hogy a típussal van valami baja,de hogy pontosan hogy lehetne megoldani nem tudom.Ha valakinek van ötlete akkor ne kíméljen.void DTLZ1(int dimension,int destiny){
int m,k,n,i,tmp;
double g=0.0;
vector<double> xi(dimension);
vector<double> tmp_xi(dimension);
vector<double> fcn(dimension);
double P=3.12;
m=dimension-1;
k=destiny;
xi[m]=0;
n=k+m-1;
for(i=0;i<dimension;i++){
cout << "Kerem az " << (i+1) << "elmet: ";
cin >> tmp;
xi[i]=tmp;
}
for(i=0;i<k;i++){
g+=pow((xi[i]-0.5),2)-cos(20*P*(xi[i]-0.5));
}
g=100*(k+g);
tmp_xi[0]=1.0;
for(i=0;i<dimension;i++){
tmp_xi[i+1]=tmp[i]*xi[i];
}
for(i=0;i<dimension;i++){
fcn[i]=(0.5)*(1+g)*(1-xi[m-i])*tmp_xi[m-i];
}
for(i=0;i<dimension;i++){
cout << fcn[i] << "\n";
}
cout << g << "\n";
} -
Gyuri16
senior tag
ha jol ertem olyat akarsz, hogy egy leforditott programban elerhetoek legyenek kepek, adatok anelkul hogy mas fajlokat kellene masolgatni, tehat minden benne legyen az exeben. ez esetben ajanlom a resource file-okkal valo megismerkedest, ami pont ezt csinalja. vs tapasztalatom nincs, de itt egy link kezdesnek: [link].
Nem vagyok egoista, csak uborkagyalu!
-
Trub
tag
Azt hogy lehet megcsinálni, hogy a programban jelen legyen egy már lefodított exe, vagy kép, vagy egy akármilyen tipusú fájl, és azt ki tudja másolni a programom egy megadott helyre? Visual studio-t használok, és a neten nem találtam semmit erről a témáról. Egyáltalán lehetséges ez?
-
Jester01
veterán
A sizeof(char) nem fogja megmondani a char méretét mert az definíció szerint mindig 1 lesz. C szabvány, 6.5.3.4.3 pont a sizeof operátorról: "When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1."
A CHAR_BITS az viszont igen
Jelenleg azonban nem ez a probléma, hanem az, hogy a ~ operátor (unsigned) int típusra automatikus konverziót csinál, lásd szabvány 6.5.3.3.4: "The result of the ~ operator is the bitwise complement of its (promoted) operand ... The integer promotions are performed on the operand, and the result has the promoted type."
Jester
-
labuwx
tag
Hali!
Valaki legyen szíves megmagyarázni, hogy ha van: usnigned char a=0x00, akkor ~a miért nem egyenlő 0xFF-fel?
Előre is köszönöm. -
Tussky
tag
Sziasztok!
Sikerült megoldani a problémámat,ellenben egy újabbal találkoztam.Amit használok MS VisualStudio + ParadisEO 1.2
Megcsinálom a buildot és a végén feljön egy ablak ami az alábbi kérdést dobja fel:
Executable for debugging session
Ahol megkellene adni egy filet,nekem alapból a C:\WINDOWS\system32\regsvr32.exe-t rakja be,ami nem tudom mennyire nyerő ötlet.
Valakinek van tippje ?
-
Jester01
veterán
Úgy nagy vonalakban belegondoltál mennyi memória kellene ahhoz? Ugye abszolút minimum szinten egy 32 bites rendszeren verem alapú paraméterátadás esetén ez legalább 12 byte/hívás. Ha 1 milliárdig szeretnél menni akkor az már 12GB lenne amit persze már meg sem tudsz címezni. 64 bites rendszeren pedig 24GB kellene, de azt legalább van esélyed megcímezni
MOD: ja persze ha a szám megy 1 milliárdig akkor az sqrt miatt kevesebb is elég lesz az igaz.
[ Szerkesztve ]
Jester
-
labuwx
tag
válasz Jhonny06 #614 üzenetére
Az csak egészek maradékát tudja megadni, a gond ott volt, hogy az sqrt() lebegőpontossal tér vissza és azzal kellett volna számolni, de most már megtanultam típust konvertálni.
Most viszont egy verem túlcsordulással küzdök, amit egy rekurzitív algoritmus okoz:bool prime(unsigned long szam, unsigned long oszto=0)
{
if (!oszto) oszto=(unsigned long)sqrt((float)szam);
if ((oszto==1) & (szam>1)) return true;
else if (szam%oszto==0) return false;
else return prime(szam, oszto-1);
}szam=18292777 -nél verem túlcsordulás.
Meg tudnátok mondani, hogy hogyan tudom megnővelni a vermet és mennyire, hogy ha szam€ us long biztos működjön?
A segítséget előre is köszönöm. -
labuwx
tag
Sziasztok!
Abban kérném a segítségetek, hogy hogyan tudom megállapítani biztosan egész double-ök osztási maradékát? -
doc
nagyúr
gondolom ez lsz a problema:
Project : error PRJ0003 : Error spawning 'cmd.exe'.de windowst hal'istennek nem hasznalok, szoval tobbet sajna nem tudok segiteni...
esetleg annyit, hogy allitsd at a cmake-et verbose modba, akkor jobban latszik hogy mit akar csinalni ami nem megy neki
(rendes oprendszer alatt a "VERBOSE=1 make" paranccsal bobeszedu lesz, windows alatt passz...) -
Tussky
tag
Sziasztok!
Egy olyan problémám lenne,hogy szeretnék Cmake-el fordítani,de állandóan ezt a hibaüzenetet kapom:
Change Dir: C:/ParadisEO-1.2/CMakeFiles/CMakeTmp
Run Build Command:\PROGRA~1\MICROS~1.0\Common7\IDE\devenv.com
CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExecMicrosoft (R) Visual Studio Version 9.0.21022.8.
Copyright (C) Microsoft Corp. All rights reserved.1>------ Build started: Project: cmTryCompileExec, Configuration: Debug
Win32 ------1>Compiling...
1>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for
80x861>Copyright (C) Microsoft Corporation. All rights reserved.
1>cl /Od /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "CMAKE_INTDIR=\"Debug\""
/D "_MBCS" /FD /RTC1 /MDd /Fo"cmTryCompileExec.dir\Debug\\"
/Fd"C:/ParadisEO-1.2/CMakeFiles/CMakeTmp/Debug/cmTryCompileExec.pdb" /W3 /c
/Zi /TC /Zm10001> ".\testCCompiler.c"
1>testCCompiler.c
1>Compiling manifest to resources...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Linking...
1>Embedding manifest...
1>Project : error PRJ0003 : Error spawning 'cmd.exe'.
1>Build log was saved at
"file://c:\ParadisEO-1.2\CMakeFiles\CMakeTmp\cmTryCompileExec.dir\Debug\BuildLog.htm"1>cmTryCompileExec - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped
==========CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:12 (PROJECT)Configuring incomplete, errors occurred!
Valakinek van ötlete ?
Ui.ocs,hogy ilyen hosszú,de gondoltam mindent iderakok
[ Szerkesztve ]
-
!wannabe
tag
Mit jelent az ha egy függvény tipusfüggetlen?
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest