Pomoc s programom C++

Sekcia o programovaní, programovacích jazykoch...
Dano1598
Používateľ
Používateľ
Príspevky: 438
Dátum registrácie: Ut 30. Sep, 2008, 20:02

Pomoc s programom C++

Príspevok od používateľa Dano1598 »

Zdravim potreboval by som pomoc s programom

Napisat program, ktorý nacita cisla zo súboru vstup.txt. Program
zistí a vypíse
súcet párnych císel v jednotlivých riadkoch súboru,
súcin prvocísel v jednotlivých riadkoch,
súcet nepárnych císel v jednotlivých riadkoch súboru.

neviem ako mam nacitat cislo zo subotu a potom snim pracovat vyhadzuje mi to chybu pri prikaze cislo << isubor
Spoiler: ukázať
#include <cstdlib>
#include <iostream>
using namespace std;
#include <fstream>
#include <ctype.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <map>
using namespace std;



int main(int argc, char *argv[])
{


int pocitadloRiadkov=0;
fstream isubor, osubor;
int sucetParnychCisel=0;

// otvorenie súborov
isubor.open( "vstup.txt", fstream::in ); // vstupný
osubor.open( "vystup.txt", fstream::out | fstream::trunc ); // výstupný out vystupny trunc premaze ked otvori

char poleSubor[5000];
int cislo;
int dlzkaSuboru = 0;

if ( isubor.is_open() && osubor.is_open() ) // ak sa otvorili
{

while(!isubor.eof()) // az kym nenastane koniec suboru
{

//poleSubor[dlzkaSuboru]= isubor.get(); // prepisanie textu zo suboru do pola
cislo << isubor;
if (cislo % 2 == 0){
sucetParnychCisel = cislo + sucetParnychCisel; }


if(isubor.peek() == '\n' )
{
cout << sucetParnychCisel << endl;
}


dlzkaSuboru++; // zistenie dlzky suboru, potrebne na pracu s polom
}



for(int i=0; i< dlzkaSuboru;i++) // kontrola prvkov jeden po druhom
{

cout << poleSubor << " ";


}



}
else
{
cout << "vstup.txt a vystup.txt sa neotvorili"<< endl;
}

if ( isubor.is_open() ) // ak je súbor otvorený
isubor.close(); // zatvorenie súboru
if ( osubor.is_open() )
osubor.close();





system("PAUSE");
return EXIT_SUCCESS;
}
CPU: Intel Core i7 4790K 4 GHz @ 4,3 GHz CPU Chladič: Noctua Nh-D15 MB: MSI Z97 Gaming 7 RAM: Crucial Ballistix 1600MHz 16 GB SSD: SAMSUNG SSD 840 PRO 256 GB GPU: Gainward GeForce® GTX 1080 Phoenix "GLH" PSU: Corsair RM 750 CASE: Fractal Define R4 Black Pearl Monitor: DELL U2417H SPEAKERS: Fostex PM0.4d
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

c++ nevie citat priamo cisla
bud si spravis funkciu, ktora cita vstup po znakoch a robi z toho cisla
alebo citas riadky a nejako ich rozdelujes
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

C++ odkedy nevie čítať čísla?
Dano1598 napísal:neviem ako mam nacitat cislo zo subotu a potom snim pracovat vyhadzuje mi to chybu pri prikaze cislo << isubor
Typ int predsa nemá operátor<< pre načítanie zo súboru. Za to ifstream má operátor>> pre načítanie zo súboru :)
(Je to rovnaké, ako keď napíšeš cin >> cislo)

Kód: Vybrať všetko

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int a = 0;
    ifstream ifs;
    ifs.open ("file.txt", std::ifstream::in);

    while( ifs.good() )
    {
        ifs >> a;
        cout << "cislo(" << a << ")" << endl;
    }

    cout << "\nDone\n";
    return 0;
}
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

no to je teda bohovsky sposob ako citat cisla :)
ale dobre, v pripade suboru to moze fungovat bez problemov.
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

Čo konkrétne sa ti na tom nepáči?
Dano1598
Používateľ
Používateľ
Príspevky: 438
Dátum registrácie: Ut 30. Sep, 2008, 20:02

Re: Pomoc s programom C++

Príspevok od používateľa Dano1598 »

spravil som toto ale stale pise ako vysledok 1
Spoiler: ukázať
#include <cstdlib>
#include <iostream>
using namespace std;
#include <fstream>
#include <ctype.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <map>
using namespace std;
int sucet=0;

bool ParneCisla(int poleSubor[5])
{
for(int i =0; i < 5; i++)
{
if(poleSubor % 2 == 0)
{
sucet = sucet + poleSubor;
}
else{return 0;}
}
return sucet;
}



int main(int argc, char *argv[])
{


int pocitadloRiadkov=0;
fstream isubor, osubor;
int sucetParnychCisel=0;

// otvorenie súborov
isubor.open( "vstup.txt", fstream::in ); // vstupný
osubor.open( "vystup.txt", fstream::out | fstream::trunc ); // výstupný out vystupny trunc premaze ked otvori

char poleSubor[5000];
int cislo;
int dlzkaSuboru = 0;

if ( isubor.is_open() && osubor.is_open() ) // ak sa otvorili
{

while(!isubor.eof()) // az kym nenastane koniec suboru
{

poleSubor[dlzkaSuboru]= isubor.get(); // prepisanie textu zo suboru do pola



if(isubor.peek() == '\n' )
{
cout << ParneCisla << endl;
}


dlzkaSuboru++; // zistenie dlzky suboru, potrebne na pracu s polom
}



for(int i=0; i< dlzkaSuboru;i++) // kontrola prvkov jeden po druhom
{

cout << poleSubor << " ";


}



}
else
{
cout << "vstup.txt a vystup.txt sa neotvorili"<< endl;
}

if ( isubor.is_open() ) // ak je súbor otvorený
isubor.close(); // zatvorenie súboru
if ( osubor.is_open() )
osubor.close();





system("PAUSE");
return EXIT_SUCCESS;
}
CPU: Intel Core i7 4790K 4 GHz @ 4,3 GHz CPU Chladič: Noctua Nh-D15 MB: MSI Z97 Gaming 7 RAM: Crucial Ballistix 1600MHz 16 GB SSD: SAMSUNG SSD 840 PRO 256 GB GPU: Gainward GeForce® GTX 1080 Phoenix "GLH" PSU: Corsair RM 750 CASE: Fractal Define R4 Black Pearl Monitor: DELL U2417H SPEAKERS: Fostex PM0.4d
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

konkretne sa mi na tom nepaci, ze to nie je uplne bezpecne ohladom oddelovacov. Ono to sice precita int, ale ak sa nemylim, nepreskakuje to napr. ciarky
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

Och Dano, ty si prešiel k C++ z pascala, však? :D
Celé zle, zober si ten môj krátky program a doplň ho na to, čo chceš. To tvoje opraviť by znamenalo veľa bolesti...
Takže ako na to moje:
1.) Nepoužívaj žiadne globálne premenné. Netreba ti ich a očividne ti robia problémy.
2.) Netreba ti ani žiadnu vlastnú funkciu, aj tie ti očividne robia problém.
3.) Pozri si ešte raz, ako sa pracuje s poliami. V takýchto príkladoch sa ti zídu, tak si ich poriadne EŠTE RAZ preštuduj.
4.) Test na koniec riadku máš správne, tak to tam len pridaj a akonáhle nájdeš koniec riadku, urob ten súčet. Ideálne z pola, do ktorého si to načítaš.
5.) Uvedom si, kedy čo očakávaš od premennej. Ak chceš, aby bola v premennej na začiatku nula, vynuluj si ju.
6.) Nemusíš v tom vidieť nič zložité. Súčet párnych čísel sa dá urobiť extrémne jednoducho (tvoj program by bol na pár riadkov) Zamysli sa nad tým ešte :)
M1ch4l napísal:konkretne sa mi na tom nepaci, ze to nie je uplne bezpecne ohladom oddelovacov. Ono to sice precita int, ale ak sa nemylim, nepreskakuje to napr. ciarky
Noa? Keď chcem načítavať čísla, tak chcem načítavať čísla, nie čiarky ani nič iné. Ešte to, aby mi načítavanie niečo preskakovalo...
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

no ale ked nacitas tu ciarku a interpretujes ju ako cislo, tak je to blbe :)

Dano: zober si riadok, rozdel si ho na cisla. Tie prejdi a podla toho, co je to zac, s nim sprav co treba. Na konci vypises vysledky a opakujes.
Naposledy upravil/-a M1ch4l v So 11. Jan, 2014, 14:00, upravené celkom 1 krát.
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

A ty si videl, že by cin zobral čiarku ako číslo? Cin načíta zo vstupu vždy to, čo má ako typ premennej. Ja som ešte veru čiarku v celom čísle nevidel.
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

Mozno som len z toho nejaky pomyleny...no nic, nejdem sa hadat, ked neviem presne ako to je.
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

No asi nevieš. Musíš ale pochopiť, dosť ma zarazilo, keď si napísal "C++ nevie načítavať čisla" a radíš začiatočníkovi, aby to robil 10x zložitejšie, ako je nutné :)
Dano1598
Používateľ
Používateľ
Príspevky: 438
Dátum registrácie: Ut 30. Sep, 2008, 20:02

Re: Pomoc s programom C++

Príspevok od používateľa Dano1598 »

Dostal soms a sem a stale to vypisuje dokola tie riadky a uz absolutne nevim co stym :-/ som z toho na prasky
Spoiler: ukázať
#include <cstdlib>
#include <iostream>
using namespace std;
#include <fstream>
#include <ctype.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <map>
using namespace std;



int main(int argc, char *argv[])
{


int pocitadloRiadkov=0;
fstream isubor, osubor;
int sucetParnychCisel=0;
int a = 0;

// otvorenie súborov
isubor.open( "vstup.txt", fstream::in ); // vstupný
osubor.open( "vystup.txt", fstream::out | fstream::trunc ); // výstupný out vystupny trunc premaze ked otvori

char poleSubor[5000];
int cislo;
int dlzkaSuboru = 0;

if ( isubor.is_open() && osubor.is_open() ) // ak sa otvorili
{

while(!isubor.eof()) // az kym nenastane koniec suboru
{

//poleSubor[dlzkaSuboru]= isubor.get(); // prepisanie textu zo suboru do pola


ifstream ifs;
ifs.open ("vstup.txt", std::ifstream::in);

while( ifs.good() )
{
ifs >> a;
cout << a << endl;
}
if (cislo % 2 == 0){
sucetParnychCisel = cislo + sucetParnychCisel; }


if(isubor.peek() == '\n' )
{
cout << sucetParnychCisel << endl;
}


dlzkaSuboru++; // zistenie dlzky suboru, potrebne na pracu s polom
}



for(int i=0; i< dlzkaSuboru;i++) // kontrola prvkov jeden po druhom
{

cout << poleSubor << " ";


}



}
else
{
cout << "vstup.txt a vystup.txt sa neotvorili"<< endl;
}

if ( isubor.is_open() ) // ak je súbor otvorený
isubor.close(); // zatvorenie súboru
if ( osubor.is_open() )
osubor.close();





system("PAUSE");
return EXIT_SUCCESS;
}
CPU: Intel Core i7 4790K 4 GHz @ 4,3 GHz CPU Chladič: Noctua Nh-D15 MB: MSI Z97 Gaming 7 RAM: Crucial Ballistix 1600MHz 16 GB SSD: SAMSUNG SSD 840 PRO 256 GB GPU: Gainward GeForce® GTX 1080 Phoenix "GLH" PSU: Corsair RM 750 CASE: Fractal Define R4 Black Pearl Monitor: DELL U2417H SPEAKERS: Fostex PM0.4d
Používateľov profilový obrázok
M1ch4l
VIP
VIP
Príspevky: 6680
Dátum registrácie: Št 21. Feb, 2008, 14:00
Bydlisko: Kysucký Lieskovec / Praha

Re: Pomoc s programom C++

Príspevok od používateľa M1ch4l »

Mozno by som si mal tieto zaklady trochu zopakovat :)
No mozno prave v tejto ulohe nie je vhodne citat cisla. On potrebuje vediet, ze je na konci riadku, lebo vtedy ma nieco vypisovat. Takze podla mna potrebuje citat bud po celych riadkoch alebo po znaku, aby to vedel jednoducho detekovat.
Music: AKG K240 MK II / Beyerdynamic DT 770 Pro 80 Ohm @ Topping DX7 Pro
Bike: 2022 Canyon Neuron CF 8; Coffee: Chemex 6-cup
Spoiler: ukázať
CPU 7800 X3D + DeepCool AK620; MB ROG Strix B650E-E; RAM G.Skill 32GB 6000CL30; GPU 7900XT Pulse; OS SSD 980 Pro 1TB; Storage SN850X 2TB, 860 QVO 2TB; PSU ROG Strix 850W Aura; CASE Define R4 Arctic White Window; Peripherals Aorus AD27QD + DELL U2311H, Razer Huntsman V2 (red linear), Razer Basilisk V3 Pro + Razer Destructor 2, Blue Snowball
BieX
Nový používateľ
Nový používateľ
Príspevky: 39
Dátum registrácie: Ut 11. Jún, 2013, 14:19
Bydlisko: Praha

Re: Pomoc s programom C++

Príspevok od používateľa BieX »

M1ch4l napísal:On potrebuje vediet, ze je na konci riadku
Tento test má správne, peek funguje ako má.

Dano, väčšinu si zmenil správne, ale jeden bod ti ešte ušiel (Ten o nulovaní premennej. Na začiatku každého riadku musíš začínať s nulovým súčtom)
A máš tam síce jeden cyklus, ale v ňom len načítaš a vypíšeš. Tak je jasné, že ti to nefunguje, keď práve v tom cykle by sa malo odohrať všetko potrebné.

Návrat na "Programovanie"