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 |
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