Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Ce marca si model de DVD-RW sa cu...

Achizitie camera video auto (II)

Baza de date cu imagini pe bani

Robotul martian european, revigor...
 Geoana: „Sistemul de vot es...

Imprimare mai multe pagini intr-o...

trebuie sa depun declaratie unica...

Ruse vs Rusesti
 Le mai putem da pe brazda? tipsuri

Recomandari gips carton tavane. (...

ce fel de activitate intretinere ...

Se poate imbunatati o poza sa se ...
 Folosește cineva syncthing? ...

Închidere fereastra dupa deschidere.

Kit AC contine brate Unitatea ext...

Smart Switch fara neutru
 

Problema in codeblocks

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
2 răspunsuri în acest subiect

#1
icx

icx

    Member

  • Grup: Members
  • Mesaje: 635
  • Înscris: 25.02.2007
Am o problema cu urmatorul program in Codeblocks (codul este mai jos). Cand dau Run, imi apare un don't send error. :deadtongue: In Borland C++, programul imi ruleaza bine. De fapt, toate celelalte coduri imi ruleaza bine chiar si in Codeblocks cu exceptia acestuia. In urma unor teste, am observat ca problema este cand apelez functia check() in main. Am pus o steluta in cod.

Despre program:
*functia citire() citeste din fisierul DATE.IN un numar intreg (numarul de noduri ale unui graf) respectiv matricea de adiacenta; in vectorul v[] se pastreaza gradul fiecarui nod
*functia check() verifica in vectorul v[] daca toate nodurile au grad impar; returneaza 1/0 in functie de valoarea de adevar
*functia write() scrie in fisierul DATE.OUT valoarea returnata de functia check()

Obs. Am avut grija sa creez fisierele DATE.IN si DATE.OUT si le-am scris conform cu problema.

#include <fstream>
#include <iostream>

using namespace std;

void citire(int n, int a[30][30], int v[30]);	//citeste din DATE.IN numarul de noduri si matricea de adiacenta
												 //calculeaza in vectorul v[i] gradul fiecarui noi `i`
int check(int n, int v[30]);					 //verifica daca gradele tuturor nodurilor sunt pare
void write(int n);							   //scrie un intreg in fisierul DATE.OUT

int main()
{
	int n, a[30][30], v[30];

	citire(n,a,v);
	write(check(n,v)); *** PROBLEMA?!
	return 0;
}

void citire(int n, int a[30][30], int v[30])
{
	int i, j;
	ifstream fin("DATE.IN");
	fin>>n;
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
			{
				fin>>a[i][j];
				v[i]+=a[i][j];
			}
	fin.close();
}

int check(int n, int v[30])
{
	int i, ok=1;
	for(i=1; i<=n; i++)
		if(v[i]%2!=0) ok=0;

	return ok;
}

void write(int n)
{
	ofstream fout("DATE.OUT");
	fout<<n;
	fout.close();
}


PS: Daca exista vreo sugestie in privinta codului... ascult cu interes. :)

Editat de icx, 10 aprilie 2009 - 14:22.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Mesaje: 30.262
  • Înscris: 24.02.2007
Functia citire nu iti modifica valoarea lui n fiindca nu ai folosit referinte asa ca va avea o valoare aiurea.

#3
icx

icx

    Member

  • Grup: Members
  • Mesaje: 635
  • Înscris: 25.02.2007
Multumesc, dani! :thumbup: Iata codul modificat:

#include <fstream>
#include <iostream>

using namespace std;

void citire(int *n, int a[30][30], int v[30]);	//citeste din DATE.IN numarul de noduri si matricea de adiacenta
												 //calculeaza in vectorul v[i] gradul fiecarui nod `i`
bool check(int n, int v[30]);					 //verifica daca gradele tuturor nodurilor sunt pare
void scrie(int n);							   //scrie un intreg in fisierul DATE.OUT

int main()
{
	int n, a[30][30], v[30];
	int i, j;
	int *p;

	p=v;

	citire(&n,a,v);
	scrie(check(n,v));
	return 0;
}

void citire(int *n, int a[30][30], int v[30])
{
	int i, j;
	ifstream fin("DATE.IN");
	fin>>*n;
	for(i=1; i<=*n; i++)
		for(j=1; j<=*n; j++)
			{
				fin>>a[i][j];
				if(a[i][j]==1) v[i]++;
			};
	fin.close();
}

bool check(int n, int v[30])
{
	int i;
	bool ok = true;
	for(i=1; i<=n; i++)
		if(v[i]%2!=0) ok=false;

	return ok;
}

void scrie(int n)
{
	ofstream fout("DATE.OUT");
	fout<<n;
	fout.close();
}

Problema a ramas la aceeasi functie citire(), mai exact la vectorul v[] care nu reuseste sa "numere" cum trebuie. (v[i] imi afiseaza locatia din memorie in loc de un intreg). Am incercat sa rezolv, dar fara rezultat, nu prea ma pricep la pointeri. :blush:

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

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

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