Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Problema la afisarea unui nume dupa cautare
Last Updated: Oct 22 2014 17:35, Started by
lupulalbastru1
, Oct 22 2014 16:11
·
0
#1
Posted 22 October 2014 - 16:11
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. |
#3
Posted 22 October 2014 - 16:21
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
Posted 22 October 2014 - 16:30
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 |
#6
Posted 22 October 2014 - 16:39
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
Posted 22 October 2014 - 16:40
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
Posted 22 October 2014 - 16:41
#9
Posted 22 October 2014 - 16:43
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
Posted 22 October 2014 - 16:57
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; 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 ? |
|
#12
Posted 22 October 2014 - 17:01
pai returneaza pozitia, da o returneaza degeaba daca tu nu o folosesti mai departe
|
#13
Posted 22 October 2014 - 17:07
dani.user, on 22 octombrie 2014 - 17:00, said:
Pointerii ii stii/intelegi? yonut_a, on 22 octombrie 2014 - 17:01, said:
pai returneaza pozitia, da o returneaza degeaba daca tu nu o folosesti mai departe 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. |
#15
Posted 22 October 2014 - 17:13
#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
Posted 22 October 2014 - 17:23
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
Posted 22 October 2014 - 17:30
#18
Posted 22 October 2014 - 17:35
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
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users