Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
casa verde 2024

Intrerupator cu N - doza doar cu ...

Incalzire casa fara gaz/lemne

Incalzire in pardoseala etapizata
 Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii

Impozite pe proprietati de anul v...
 teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...

Rezultat RMN
 Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor

Discuții despre TVR Sport HD.
 

Putin ajutor la citirea din fisiere?

- - - - -
  • Please log in to reply
10 replies to this topic

#1
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Deci am un fisier sursa ( source.cpp ) in care am main-ul si apelez 4 functii al caror antet, sau declaratie.. sau cum s-o numii este in header.h si le-am scris codul in header.cpp. Mai am un fisier struct.h in care am declarat o structura ca sa fie vizibila in toate celelalte fisiere. Daca vreau sa citesc valori din fisier cu o functie Citire nu merge..
source.cpp:
int main() {

f.open("Text.txt");
int n;
f >> n;
fractie v[10];
Citire(v, n);
cout << endl;
Afisare(v, n);
cout << endl;
/*Simplificare(v, n);
cout << endl;
Ordonare(v, n);
cout << endl;*/
}


struct.h:
#pragma once
#include <iostream>
using namespace std;
struct fractie {
int numarator;
int numitor;
};


header.h:
#pragma once
#include <iostream>
#include "struct.h"
ifstream f;
using namespace std;
void Citire(fractie v[],int n);

void Afisare(fractie v[],int n);

void Simplificare(fractie v[],int n);

void Ordonare(fractie v[],int n);


header.cpp:
#include "Header.h"
#include <fstream>
void Citire(fractie v[],int n)
{


for (int i = 0; i < n; i++) {
f >> v[i].numarator >> v[i].numitor;
}
}
void Afisare(fractie v[], int n)
{
for (int i = 0; i < n; i++) {
cout << v[i].numarator << "/" << v[i].numitor << endl;
}

}
void Simplificare(fractie v[], int n)
{
}
void Ordonare(fractie v[], int n)
{
}


si fisierul text..
5
-4 3
-9 1
3 18
5 -2
6 -3


Nu-mi dau seama unde ar trebui sa declar variabila care citeste din fisier.. ca sa mearga peste tot .. Si daca vreau sa citesc n-ul din fisier si apoi sa-l transmit ca parametru in functii ar trebui sa-l citesc in main, nu?

Edited by g0dafk, 16 December 2017 - 12:20.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,194
  • Înscris: 24.02.2007
Variabilele globale nu se declara asa in headere. Scapa de variabila globala si transmite-o ca parametru spre fiecare functie.

#3
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
@dani.user te referi la ceva de genul?:
void citire(fractie v[],int n,fstream f);


Edited by g0dafk, 16 December 2017 - 12:27.


#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,194
  • Înscris: 24.02.2007
Da, doar ca streamul trebuie pasat ca referinta sau pointer, nu e copiabil. Si poti generaliza la istream (input stream) in loc de fstream ca nu-i pasa functiei ca citeste din fisier asu din alt fel de stream.

#5
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Inca o intrebare. De ce nu merge aceasta sortare? Stiu ca pentru a compara doua fractii trebuie "inmultiti numaratorul si numitorul in X". Adica 2/3 < 3/2 pentru ca 2x2 < 3x3.
M-am gandit sa implementez ceva gen:
void Ordonare(fractie v[], int n)
{
for (int i = 0; i < n; i++) {
for (int j = i; j < n ; j++) {
if (v[i].numarator*v[j].numitor < v[i].numitor*v[j].numarator) {
swap(v[i], v[j]);
}
}
}
}


Edited by g0dafk, 16 December 2017 - 13:24.


#6
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Cum ai implementat functia swap?

#7
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Nu am implementat-o eu, merge... adica e implementata deja cred. Zici ca din cauza ei nu merge? Sa incerc sa fac cu un auxiliar? aux=a, a=b, b=aux?

#8
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,194
  • Înscris: 24.02.2007
Cand sortezi (prin comparare) structuri ai 3 lucruri independente de implementat:

  • Compararea a doua structuri (de exemplu suprascrii operator< astfel incat sa pot scrie ceva de genul if (structura1 < structura2))
  • Interschimbarea a doua structuri (swap)
  • Algoritmul de sortare

Incearca sa le scrii cat mai independent/reutilizabil si apoi va fi foarte usor sa treci la std::sort.

#9
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 33,066
  • Înscris: 06.01.2007
Dar de ce nu depanezi programul?
Vezi ce valori iau toate variabilele si te prinzi imediat unde e greseala.

#10
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Gata, i-am dat de cap ( cred ). Chestia era ca nu functiona corect cu valori negative de exemplu -4/3 comparat cu -9/1. -4 x 1 = -4 si -9 x 3 = -27. Deci dupa regula asta... -27 e mai mic decat -4 deci mie asta imi strica progamul. Nu stiu daca e 100% corect ca am pus modul ca sa verifice 27 si 4 , dar se pare ca merge.
Sper ca nu e doar un truc ieftin care merge pentru anumite valori iar pentru altele sa dea ceva gresit. Nu stiu cu ce fractii sa-mi testez programul. Am testat cu
-4 3
-9 1
3 18
5 -2
6 -3

Si a iesit corect Posted Image.

@dani.user Suprascrierea operatorilor e doar pentru a avea un cod mai curat si pentru a fi totul organizat nu? E de fapt o functie care face ceva, corect? M-am uitat la niste tutoriale pe internet si asta imi pare ca face. Insa nu sunt sigur ca am inteles 100% corect.

De exemplu daca am un vector: v.x=valoare si v.y=valoare ca sa-l adun cu alt vector ar trebui sa adun v1.x si v2.x apoi v1.y si v2.y asa ca pot face face ceva gen

vector operator+(const vector& stanga,const vector& dreapta){
vector rez;
rez.x= v1.x+v2.x;
rez.y=v1.y+v2.y;
return rez;
}
si acum pot scrie doar v1+v2, nu?

Edited by g0dafk, 16 December 2017 - 14:43.


#11
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,194
  • Înscris: 24.02.2007
Da

https://forum.softpe...eriei-software/

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate