infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Dumitrescu Calin din Octombrie 06, 2012, 19:37:12



Titlul: orase
Scris de: Dumitrescu Calin din Octombrie 06, 2012, 19:37:12
urmatoarelel date se citesc din fisier,fiind nominalizat un oras de la tastatura,sa se determine cel mai apropiat oras de acesta:

in fisierul "in.txt" avem:
15
Timisoara 45.7494 21.2272
Lugoj 45.6886 21.9031
Cluj 46.7667 23.6
Bucuresti 44.4226 26.1237
Craiova 44.3167 23.8
Constanta 44.18 28.63
Iasi 47.17 27.57
Deva 45.8833 22.9
Arad 46.19 21.32
Sibiu 45.79 24.13
Oradea 47.0667 21.9333
Bacau 46.5667 26.9
Galati 45.44 28.04
Pitesti 44.85 24.8667
//primul nr este latitudinea, al doilea longitudinea

#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
struct oras
{
   char nume[20];
   float lat,longi;
};
oras x[26];
int main()
{
   ifstream in("in.txt");
   int n,i,sw;
   float aux,m1lat,m2lat,m1longi,m2longi,z1,z2;
   char s[50],*p,q[10],w[10];
   in>>n;
   for(i=1;i<=n;i++)
   {
      in.getline(s,50);
      p=strchr(s,' ');
      strncpy(x.nume,s,p-s);
      x.nume[p-s]=0;
      strcpy(s,s+p+1);//<---
      p=strchr(s,' ');
      strncpy(q,s,p-s);
      q[p-s]=0;
      x.lat=atoi(q);
      strcpy(s,s+p+1);
      p=strchr(s,0);
      strncpy(w,s,p-s);//<---
      w[p-s]=0;
      x.longi=atoi(w);
   }
   do
   {
      sw=0;
      for(i=1;i<=n;i++)
         if(x.lat>x[i+1].lat)
         {
            aux=x.lat;
            x.lat=x[i+1].lat;
            x[i+1].lat=aux;
            sw=1;
         }
         else
            if(x.longi>x[i+1].longi)
            {
               aux=x.longi;
               x.longi=x[i+1].longi;
               x[i+1].longi=aux;
               sw=1;
            }
   }while(sw==1);
   cout<<"introduceti oras:";
   cin.getline(s,50);
   for(i=1;i<=n;i++)
      if(strcmp(s,x.nume)==0)
      {
         if(i==1)
            cout<<x[i+1].nume;
         else
         {
            m1lat=x[i+1].lat-x.lat;
            m1longi=x[i+1].longi-x.longi;
            z1=m1lat+m1longi;
            m2lat=x.lat-x[i-1].lat;
            m2longi=x.longi-x[i-1].longi;
            z2=m2lat+m2longi;
            if(z1<z2)
               cout<<x[i+1].nume;
            else
               cout<<x[i-1].nume;
         }
      }
}

erorile care apar la compilare:
invalide operands of types `char[50]' and `char*' to binary `operator+'(randurile insemnate cu sageata)
in plus, nu stiu daca lat si longi sunt float cand le extrag din sir.