Commit b3c801a4 by kmicha

Upload New File

parent fc8fd7f6
Showing with 198 additions and 0 deletions
/*
Failist koordinaadid.txt sisestatakse kirjed struktuuriga:
* X, Y - punktide kordinaadid tasandil;
klaviatuurilt sisestatakse R, Xo ja Yo (ringi raadius ja keskpunkti koordinaadid)
Faili vastus.txt ja ekraanile väljastatakse need kirjed struktuuriga:
* X, Y - sisestatud väärtused
* L - kaugus (Xo ja Yo) ja antud punkti vahel, kus L <= R;
iga kirje väljastatakse ühte ritta.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct{
int X;
int Y;
}koordinaadid;
typedef struct{
koordinaadid punkt;
double kaugus; // kaugus sisestatud punkti ja koordinaat punktide vahel
}ring;
void failiNimi(char[20], char*);
int kontroll(FILE*);
int failiPikkus(FILE*);
void taitmine(FILE*, int t, koordinaadid[t]);
void sisestus(int*, int*, int*, char*, char*, char*);
void arvutus(int, int, int, int t, koordinaadid[t], ring[t]);
void valjastus(FILE*, int t, ring[t]);
int main(void){
FILE *F1, *F2;
char F1nimi[20], F2nimi[20];
int k, n, R, Xo, Yo;
failiNimi(F1nimi, "Koordinaatide faili nimi: \n");
F1 = fopen(F1nimi, "r");
// Kontroll, kas fail eksisteerib/avati õigesti
k = kontroll(F1);
if(k == 1){
printf("Faili ei leitud!");
return 1;
}
failiNimi(F2nimi, "Väljastus faili nimi: \n");
F2 = fopen(F2nimi, "w");
n = failiPikkus(F1); //leiame mitu kirjet on failis et moodustada array
printf("faili pikkus: %d\n", n);
koordinaadid punktid[n]; //failis olevad koordinaadid
ring raadius[n]; // Ringi raadiusesse jäävad puntkid
taitmine(F1, n, punktid); // faili info programmi mällu
fclose(F1); // pole enam vaja
sisestus(&R, &Xo, &Yo, "Sisesta ringi raadius R: \n",
"Sisesta ringi keskpunkti X koordinaat: \n",
"Sisesta ringi keskpunkti Y koordinaat: \n");
printf("Arvud sisestatud\n");
// leiame raadiusesse jäävad punktid ja väljastame
arvutus(R, Xo, Yo, n, punktid, raadius);
valjastus(F2, n, raadius);
fclose(F2);
return 0;
}
void failiNimi(char failiNimetus[20], char *tekst){
printf("%s", tekst);
scanf("%s", failiNimetus);
}
int kontroll(FILE *input){
if(input == NULL){
return 1;
}
return 0;
}
int failiPikkus(FILE *input){
int x = 0;
while(fscanf(input, "%*d %*d") != EOF){
x++;
}
rewind(input);
return x;
}
void taitmine(FILE *input, int N, koordinaadid punktd[N]){
int i = 0;
while(fscanf(input, "%d %d", &punktd[i].X, &punktd[i].Y) != EOF){
i++;
}
}
void sisestus(int *raadius, int *xkoord, int *ykoord,
char *radTekst, char *xTekst, char *yTekst){
printf("%s", radTekst);
scanf("%d", raadius);
printf("%s", xTekst);
scanf("%d", xkoord);
printf("%s", yTekst);
scanf("%d", ykoord);
}
void arvutus(int R, int Xo, int Yo, int N,
koordinaadid pnktd[N], ring raadius[N]){
int i, x, y, counter = 0;
double vahemaa;
for(i = 0; i < N; i++){
x = pnktd[i].X;
y = pnktd[i].Y;
vahemaa = sqrt( pow((x - Xo), 2) + pow((y - Yo), 2));
raadius[i].kaugus = -1; // kontroll tühjaks reaks hiljem
if(vahemaa <= R){
raadius[counter].punkt.X = pnktd[i].X;
raadius[counter].punkt.Y = pnktd[i].Y;
raadius[counter].kaugus = vahemaa;
counter++;
}
}
}
void valjastus(FILE *output, int N, ring sisePunktid[N]){
int i;
printf("Nr\t X koord\t Y koord\t Kaugus\n");
for(i = 0; i < N; i++){
if(sisePunktid[i].kaugus == -1){ // et ei väljastaks tühja rida
continue;
}
// Väljastus konsooli
printf("%d %d\t %d\t %.2lf\t\n",
i + 1,
sisePunktid[i].punkt.X,
sisePunktid[i].punkt.Y,
sisePunktid[i].kaugus
);
// väljastus faili;
fprintf(output, "%d %d %.2lf\n",
sisePunktid[i].punkt.X,
sisePunktid[i].punkt.Y,
sisePunktid[i].kaugus
);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment