Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
De unde cumparați legume si fructe?

Samsung S21 ultra

Site-uri matrimoniale serioase

Plasa de umbrire peste gard de pl...
 O smecherie pe care nu o inteleg

Balcon parter fara acte

unde gasesc un speed bag in bucur...

Programe TV cu altfel de sporturi
 Laptop "bun la toate" max...

navigatie noua vw tiguan

ctfmon.exe - System Error (in Saf...

Ați prins vremurile cand 120 Volț...
 Whatsapp nu afișeaza numele ...

Medii admitere Politehnica Bucure...

Se extinde Baza de la Kogalniceanu

Politist mutilat de caine in curt...
 

Cum folosesc o structura intr-un header?

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

#1
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Am declarat o structura:
struct elev{
char nume[10];
char prenume[10];
int minute = 0, secunde = 0;
};


Si vreau s-o folosesc intr-un header, sa fac o functie care citeste elevii de la tastatura, dar nu-mi recunoaste tipul meu de date elev.

void CitireElevi(elev v[], int n)


Il subliniaza cu o linie rosie...

Am mai adaugat si niste variabile care la fel, nu imi sunt vazute in afara fisierului source.cpp. De exemplu vreau sa folosesc o variabila declarata in source.cpp in header.cpp unde am o functie.

source.cpp:
#include <iostream>
using namespace std;
int barem_minute = 4;
struct elev {
char nume[10];
char prenume[10];
int minute = 0, secunde = 0;
};
int main() {

elev v[20];
int n = 5;
void CitireElevi(elev v[], int n);
void AfisareElevi(elev v[], int n);
}


header.h:
#pragma once
#include <iostream>
using namespace std;

void CitireElevi(elev v[], int n);
void AfisareElevi(elev v[], int n);


header.cpp:
#include "Header.h"
void CitireElevi(elev v[], int n)
{
for (int i = 0; i < n; i++) {
  cout << "Nume elev: "; cin >> v[i].nume;
  cout << "Prenume elev: "; cin >> v[i].prenume;
  cout << "Minute: "; cin >> v[i].minute;
  cout << "Secunde: "; cin >> v[i].secunde;
}
}
void AfisareElevi(elev v[], int n)
{
for (int i = 0; i < n; i++) {
  if (v[i].minute > barem_minute && v[i].secunde > barem_secunde) {
  }
}
}


Edited by g0dafk, 15 December 2017 - 11:52.


#2
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,960
  • Înscris: 24.02.2006
de  unde vrei sa stie compilatorul ce-i aia "elev" atunci cand proceseaza fisierul header.h ?

pune structura intr-un .h si include-l atat in header.h cat si in header.cpp, astfel incat compilatorul sa stie ce vrei sa faci

#3
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Mersi, am facut asta si acum programul ruleaza doar ca... imi afiseaza Press any key to continue... Posted Image

#4
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009
Pentru ca tu in main declari niste functii, nu le apelezi pe cele existente.

#5
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016
Pai trebuie si sa creezi o functie main care va fi executata prima data:
int main(void)
{
	printf("hi hjk");
	return 0;
}

in functia main introduci codul de citire a elevilor.

Am creat un program in Pelles C:
Class1.h:
typedef struct _elev *elev;
void CitireElev(elev v);


Class1.c
#include <stdio.h>
#include <windows.h>
#include <commctrl.h>
#include <Class1.h>
struct _elev {
  char nume[10];
  char prenume[10];
  int minute, secunde;
};
void CitireElev(elev v)
{
}
int main(void)
{
	printf("hi hjk");
	return 0;
}



Nu reusesc inca sa creez un array de elevi, nu stiu de ce!
Citeste:
http://wiki.pellesc....php/adt_example

#6
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Asa e, m-am tampit, dadusem prea mult copy paste si nu observasem ca in main am tot declarari de functii.
As mai avea o intrebare, daca vreau sa afisez elevii in ordine alfabetica dupa nume si prenume, cea mai simpla metoda ar fi sa sortez vectorul alfabetic, nu? Stiu sa-l sortez dupa nume, dar dupa nume si prenume.. cum ar trebui sa fac? Sa fac 2 sortari, una dupa nume si una dupa prenume?

#7
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Scrii un comparator custom care compară doi elevi după nume și prenume și folosești sort. Vezi link.

http://en.cppreferen.../algorithm/sort

Două sortări nu funcționează decât în cazuri foarte speciale.

#8
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
Codul asta e corect? Si prin corect ma refer la ceea ce face, ca de rulat, ruleaza.
void SortareElevi(elev v[], int n)
{
int ok = 0;
for (int i = 0; i < n; i++) {
do {
ok = 0;
for (int i = 0; i < n - 1; i++) {
if (v[i].nume > v[i + 1].nume && v[i].nume != v[i + 1].nume) {
	 swap(v[i].nume, v[i + 1].nume);
	 swap(v[i].prenume, v[i + 1].prenume);
	 swap(v[i].minute, v[i + 1].minute);
	 swap(v[i].secunde, v[i + 1].secunde);
	 ok = 1;
}
if (v[i].nume == v[i + 1].nume) {
	 if (v[i].prenume > v[i + 1].prenume) {
	 swap(v[i].nume, v[i + 1].nume);
	 swap(v[i].prenume, v[i + 1].prenume);
	 swap(v[i].minute, v[i + 1].minute);
	 swap(v[i].secunde, v[i + 1].secunde);
	 ok = 1;
	 }
}
}

} while (ok);
}
}



@tavitu, m-am uitat pe site-ul tau, dar mai rau m-a bagat in ceata. Am incercat ceva mai sus, plecand de la o sortare simpla de cuvinte.
M-am gandit sa sortez dupa nume, si unde gasesc 2 nume egale, sa sortez dupa prenume... kinda..

Edited by g0dafk, 15 December 2017 - 16:11.


#9
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,960
  • Înscris: 24.02.2006
1. folosesti entitati de tip clase (printre altele) ca sa poti trata informatiile ca pe un intreg. deci n-are rost sa schimbi toate datele obiectelor de pe pozitiile i si i+1, cand poti schimba obiectele in sine
2. daca A>B, atunci cu siguranta A!=B (apropo de comparatia din primul for)

#10
g0dafk

g0dafk

    Member

  • Grup: Members
  • Posts: 462
  • Înscris: 10.11.2016
@Smiley
1.Mersi, nu ma gandeam la asta.
2.Sunt zapacit rau, nu imi dadeam seama daca nu-mi ziceai. =))

Edited by g0dafk, 15 December 2017 - 17:07.


#11
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013

View Postg0dafk, on 15 decembrie 2017 - 16:10, said:

@tavitu, m-am uitat pe site-ul tau, dar mai rau m-a bagat in ceata.
Arunca o privire si aici: http://www.cplusplus...algorithm/sort/

Mai precis, tavitu ti-a sugerat sa folosesti functia de sortare deja implementata in biblioteca algorithm.

#12
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
for-ul exterior e în plus.

#13
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,960
  • Înscris: 24.02.2006

View Postjegmihai, on 15 decembrie 2017 - 17:12, said:

Mai precis, tavitu ti-a sugerat sa folosesti functia de sortare deja implementata in biblioteca algorithm.

la nivelul la care e 0dafk, e o sugestie destul de nepotrivita. el are acum nevoie sa invete limbajul si (mai ales) algoritmica, nu metode deja existente pe care doar sa le apeleze.

#14
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,183
  • Înscris: 24.02.2007
Vrei sa sortezi dupa multiple criterii? Compari pe rand, ex:

int diferenta = a.camp1 - b.camp1;
if (diferenta != 0) return diferenta;

diferenta = a.camp2 - b.camp2;
if (diferenta != 0) return diferenta;
...
return diferenta;



Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

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