Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
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...
 Trotineta- cat rezista?

Windows 11 si inregistrare de pe ...

Cont Facebook spart

Accesare Plex prin webstation
 

Problema la afisarea unui nume dupa cautare

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

#1
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Buna!
Am un articol si am facut o cautare dupa nume dar nu reusesc sa afisez datele corespunzatoare cautarii facute. Ma poate ajuta cineva, va rog?

//#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef enum{hotel,pensiune}tip_cazare;
typedef enum{stele_2,stele_3,stele_4}tip_hotel;
typedef union{
		   int loc_libere;
	 tip_hotel nr_stele;
			 }info_cazare;
typedef struct{
			char nume[20];
	  int capacitate;
	  char nume_statiune[20];
	  tip_cazare t_cazare;
	  info_cazare info;
			  }cazare;
cazare c[30];
int i,n=0;


void citire()
{
FILE *f;
if((f=fopen("hotel.txt","rt"))==NULL)
	{  printf("Fisierul nu a fost gasit!");
	
  return ;
}
while(!feof (f))
{
  fscanf(f,"%s%d%s%d",c[n].nume,&c[n].capacitate,c[n].nume_statiune,&c[n].t_cazare);
  switch(c[n].t_cazare)
  {
   case 0: fscanf(f,"%d",&c[n].info.nr_stele);
	break;
   case 1: fscanf(f,"%d",&c[n].info.loc_libere);
	break;
  }
n++;
}

fclose(f);
printf("\nS-a efectuat citirea\n");
}


void afisare()
{
for(i=0;i<n;i++)
  {
  printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);
  switch(c[n].t_cazare)
  {
   case 0: printf("\t%d",c[i].info.nr_stele);
	break;
   case 1: printf("\t%d",c[i].info.loc_libere);
	break;
  }
}
}


int cautare_liniara(char nume_hotel[])
{
int i=0;
while((strcmp(c[i].nume,nume_hotel)!=0) && i<=n)
	i=i+1;
return i;
}

int main()
{
int opt=0;
char nume_hotel[20];
do{
   printf("\n1.Citire");
   printf("\n2.Afisare");
   printf("\n3.Cautare liniara");
  
   printf("\n0.Iesire");
   printf("\nIntroduceti optiunea: ");
   scanf("%d",&opt);
   switch(opt)
   {
   
   case 1: citire();
	 break;
   case 2: afisare();
	 break;
   case 3: printf("Dati numele dorit: ");
				scanf("%s",nume_hotel);
			   printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);
				cautare_liniara(nume_hotel);
				break;
 
   case 0: break;
   }
}while(opt!=0);
getch();
return 0;
}


Edited by lupulalbastru1, 22 October 2014 - 16:12.


#2
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
zi si ce ai in fisierul ala

#3
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Fisier hotel.txt

nume		 capacitate		  nume_statiune			   t_cazare	  nr_stele sau loc_libere
Albatros	 50			   Mamaia		 0				  0
Vraja_marii	 10			  Mamaia		 1				8


Edited by lupulalbastru1, 22 October 2014 - 16:25.


#4
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
pai ia vezi ce faci cu i ul ala din cautare_liniara.

Ori il folosesti global, ori local ?

Si nu ti se pare normal mai intai sa apelezi functia de cautare si pe urma sa faci afisarea ?

Sfat renunta la variabilele alea globale. Aici ai folosit doar 2-3 si deja ti au facut probleme

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,183
  • Înscris: 24.02.2007
De ce ai folosit union acolo?

#6
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Am renuntat la i declarat global.
Dar imi intra in bucla infinita si asa
printf("Dati numele dorit: ");
				scanf("%s",nume_hotel);
	printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);
				cautare_liniara(nume_hotel);
si asa
printf("Dati numele dorit: ");
				scanf("%s",nume_hotel);
				cautare_liniara(nume_hotel);
			   printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);


#7
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
pai daca ai renuntat la el global atunci ce valoare mai ia i ul de aici ?

printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);

si de ce functia cautare_liniara returneaza ceva daca nu e folosit nicaieri ?

#8
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013

 dani.user, on 22 octombrie 2014 - 16:37, said:

De ce ai folosit union acolo?
Pentru ca asa zice in enunt. Problema are mai multe cerinte (mai trebuie facute niste sortari), dar alea imi merg.

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,183
  • Înscris: 24.02.2007
Scrie in enunt ca numarul de locuri libere si numarul de stele sa fie stocate in acelasi loc in memorie? N-as prea crede...

Edited by dani.user, 22 October 2014 - 16:43.


#10
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013

 dani.user, on 22 octombrie 2014 - 16:43, said:

Scrie in enunt ca numarul de locuri libere si numarul de stele sa fie stocate in acelasi loc in memorie? N-as prea crede...
Fie TDA-urile:
	tip_cazare enumerare, cu elementele:  hotel, pensiune
	tip_hotel  enumerare, cu elementele: stele_2, stele_3, stele_4
	info_cazare uniune, cu campurile:
		loc_libere (de tip int ), daca este vorba de o pensiune
		nr_stele (de tip tip_hotel), daca este vorba de un hotel
	cazare articol (cu variante) cu campurile:
		nume (de tip sir de caractere)
		capacitate(int)
		nume_statiune(de tip sir de caractere)
		t_cazare(de tip tip_cazare)
		info(de tip info_cazare)
Sa se scrie un program in limbajul C care sa implementeze TDA-urile de mai sus, si,
folosind un tablou de tip cazare sa gestioneze informatiile din fiserul "hotel.txt".
Programul va fi interactiv (cu meniu), realizand urmatoarele operatii:
a) incarcarea datelor din fisierul ”hotel.txt” in tabloul de articole;
B) afisarea tuturor datelor din tabloul de articole ;
c) Cautarea unui hotel dupa nume (numele cautat se citeste de la tastatura) folosind:
	-tehnica cautarii liniare,
	-tehnica fanionului
d) sortarea tabloului in ordine alfabetica dupa nume.
e)Cautarea unui hotel dupa nume (numele cautat se citeste de la tastatura) folosind:
	-tehnica cautarii binare,
	-tehnica cautarii binar performante.

Fisier hotel.txt
nume		  capacitate	nume_statiune	t_cazare	nr_stele
								sau loc_libere
Albatros		50		 Mamaia		 0		 0
Vraja_marii	 10		 Mamaia		 1		 8

 yonut_a, on 22 octombrie 2014 - 16:40, said:

pai daca ai renuntat la el global atunci ce valoare mai ia i ul de aici ?

printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);

si de ce functia cautare_liniara returneaza ceva daca nu e folosit nicaieri ?
Deci functia cautare_liniara returneaza pozitia hotelului cautat. Dar cum fac sa afisez si datele referotoare la acel hotel?

#11
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,183
  • Înscris: 24.02.2007
Pointerii ii stii/intelegi?

#12
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
pai returneaza pozitia, da o returneaza degeaba daca tu nu o folosesti mai departe

#13
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013

 dani.user, on 22 octombrie 2014 - 17:00, said:

Pointerii ii stii/intelegi?
Ii stiu cat de cat.

 yonut_a, on 22 octombrie 2014 - 17:01, said:

pai returneaza pozitia, da o returneaza degeaba daca tu nu o folosesti mai departe
am facut asa:
printf("Dati numele hotelului: ");
	   scanf("%s", nume_hotel);
	i=cautare_liniara(nume_hotel);
	if(i==n+1)
	 printf("Nu s-a gasit hotelul \n");
	else
	 printf("S-a gasit hotelul pe pozitia: %d \n",i);
Dar eu vreau sa fac sa-mi afiseze si date despre hotelul respectiv.

#14
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
pune tot codul modificat

#15
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef enum{hotel,pensiune}tip_cazare;
typedef enum{stele_2,stele_3,stele_4}tip_hotel;
typedef union{
		   int loc_libere;
	 tip_hotel nr_stele;
			 }info_cazare;
typedef struct{
			char nume[20];
	  int capacitate;
	  char nume_statiune[20];
	  tip_cazare t_cazare;
	  info_cazare info;
			  }cazare;
cazare c[30];
int n=0;
void citire()
{
FILE *f;
if((f=fopen("hotel.txt","rt"))==NULL)
	{  printf("Fisierul nu a fost gasit!");
  return ;
}
while(!feof (f))
{
  fscanf(f,"%s%d%s%d",c[n].nume,&c[n].capacitate,c[n].nume_statiune,&c[n].t_cazare);
  switch(c[n].t_cazare)
  {
   case 0: fscanf(f,"%d",&c[n].info.nr_stele);
	break;
   case 1: fscanf(f,"%d",&c[n].info.loc_libere);
	break;
  }
n++;
}

fclose(f);
printf("\nS-a efectuat citirea\n");
}
void afisare()
{int i;
for(i=0;i<n;i++)
  {
  printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);
  switch(c[n].t_cazare)
  {
   case 0: printf("\t%d",c[i].info.nr_stele);
	break;
   case 1: printf("\t%d",c[i].info.loc_libere);
	break;
  }
}
}
int cautare_liniara(char nume_hotel[])
{
int i=0;
while((strcmp(c[i].nume,nume_hotel)!=0) && i<=n)
	i=i+1;
return i;
}
int main()
{
int i=0,opt=0;
char nume_hotel[20];
do{
   printf("\n1.Citire");
   printf("\n2.Afisare");
   printf("\n3.Cautare liniara");
   printf("\n0.Iesire");
   printf("\nIntroduceti optiunea: ");
   scanf("%d",&opt);
   switch(opt)
   {
   
   case 1: citire();
	 break;
   case 2: afisare();
	 break;
   case 3: printf("Dati numele hotelului: ");
		scanf("%s", nume_hotel);
		i=cautare_liniara(nume_hotel);
		if(i==n+1)
	  printf("Nu s-a gasit hotelul \n");
	 else
		 printf("S-a gasit hotelul pe pozitia: %d \n",i);
	 break;
  
   case 0: break;
   }
}while(opt!=0);
getch();
return 0;
}


#16
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,944
  • Înscris: 03.08.2008
daca pui afisare la loc

printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);

merge

#17
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013

 yonut_a, on 22 octombrie 2014 - 17:23, said:

daca pui afisare la loc

printf("\n%s\t%d\t%s\t%d",c[i].nume,c[i].capacitate,c[i].nume_statiune,c[i].t_cazare);

merge
Multumesc mult!

#18
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
1. Scrie teste. De exemplu, tie nici macar citirea datelor din fisier nu-ti functioneaza corect, dar normal ca n-ai testat asta.
2. Invata sa faci debugging.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

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