Moim zadaniem jest stworzenie programu który odczytuje z pliku współrzędne punktów a następnie wyszukuje parę punktów o najmniejszej odległości je dzielącej. W programie nie mogę zmieniać zawartości funkcji, jedynie mogę operować w mainie.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
struct point_t
{
int x;
int y;
};
struct point_t* set(struct point_t* p, int x, int y)
{
if(p == NULL)
{
return NULL;
}
(*p).x = x;
(*p).y = y;
return p;
}
float distance(const struct point_t* p1, const struct point_t* p2, int *err_code)
{
float zmienna = 0;
if(p1 == NULL && err_code != NULL)
{
*err_code = 1;
return -1;
}
if(p2 == NULL && err_code != NULL)
{
*err_code = 1;
return -1;
}
if(err_code != NULL)
{
*err_code = 0;
}
if(err_code == NULL && p2 == NULL)
{
return -1;
}
if(err_code == NULL && p1 == NULL)
{
return -1;
}
zmienna = sqrt((p2->x - p1->x)*(p2->x - p1->x) + ((p2->y - p1->y)*(p2->y - p1->y)));
return zmienna;
}
float zamiana(const struct point_t* p1, const struct point_t* p2, struct point_t* max, struct point_t* max1)
{
max->x = p1->x;
max->y = p1->y;
max1->x = p2->x;
max1->y = p2->y;
return 0;
}
int main()
{
struct point_t a, *p1;
p1 = &a;
struct point_t b, *p2;
p2 = &b;
struct point_t max, *pmax;
pmax = &max;
struct point_t max1, *pmax1;
pmax1 = &max1;
char filename[100];
FILE *plik;
FILE *plik1;
int x = 0;
int y = 0;
int x1 = 0;
int y1 = 0;
int pozycja = 0;
float dlugosc = 0;
float maximum = 999999999999;
int error = 0;
int *p_error = 0;
p_error = &error;
int koniec = 0;
int zmienna = 0;
int licznik = 0;
printf("Podaj nazwe pliku: ");
scanf("%99s", filename);
plik = fopen(filename, "r");
if(plik == NULL)
{
printf("Couldn't open file");
return 4;
}
plik1 = fopen(filename, "r");
fseek(plik, 0, SEEK_END);
koniec = ftell(plik);
fseek(plik, 0, SEEK_SET);
while(1)
{
//printf("%ld", ftell(plik));
if(fscanf(plik, "%d %d", &x, &y) != 2)
{
fclose(plik);
fclose(plik1);
//printf("%ld %d", ftell(plik), koniec);
printf("File corrupted");
return 6;
}
set(p1, x, y);
pozycja = ftell(plik);
fseek(plik1, pozycja, SEEK_SET);
while((licznik = fscanf(plik1, "%d %d", &x1, &y1)) == 2)
{
set(p2, x1, y1);
dlugosc = distance(p1, p2, p_error);
zmienna++;
if(dlugosc < maximum && (p1->x != p2->x || p1->y != p2->y))
{
zamiana(p1, p2, pmax, pmax1);
maximum = dlugosc;
}
if(fabs(dlugosc-maximum) < 0.0000001)
{
if(p1->x < pmax->x || p2->x < pmax1->x)
{
zamiana(p1, p2, pmax, pmax1);
}
}
//printf("%f {%f}[%d %d %d %d]\n", dlugosc, maximum, p1->x, p1->y, p2->x, p2->y);
}
fseek(plik, pozycja, SEEK_SET);
if(pozycja == koniec)
{
break;
}
}
if(zmienna <= 1)
{
fclose(plik);
fclose(plik1);
printf("File corrupted");
return 6;
}
printf("%d %d %d %d\n", pmax->x, pmax->y, pmax1->x, pmax1->y);
fclose(plik);
fclose(plik1);
return 0;
}
Dla pliku w którym znajduje się ponad 1000 linijek od razu wyskakuje błąd i komunikat File Corrupted
Na przykład takiego:
-204 -233
913 -735
564 962
-258 -132
-316 -887
32 -682
101 913
23 715
-556 -598
226 186
606 73
53 -657
-462 389
-737 228
563 152
912 172
-2 -225
-501 144
-593 -700
-714 -148
741 -197
565 647
321 -916
-277 -71
-951 -193
-402 -75
-360 -618
874 -533
-659 872
-272 77
750 402
-538 249
-956 -21
531 -133
424 -817
-934 -919
250 -272
844 -213
-390 -139
338 -623
939 -169
-817 -816
-1 -295
840 844
146 -708
431 -968
377 438
21 985
-497 -437
367 222
944 -819
73 258
745 157
700 443
-197 786
152 552
912 190
234 338
15 278
-208 -974
629 -222
-30 561
-504 40
-903 -491
-771 850
276 -949
-988 -784
-467 -461
177 682
-130 903
242 -505
-661 -773
959 -221
678 -813
64 -246
-160 -404
635 329
-650 17
710 701
566 -7
257 -195
332 -885
620 956
-282 -870
-413 140
329 417
-330 385
588 -9
-968 -123
-480 814
737 970
877 934
973 973
619 516
151 -633
830 -730
-477 955
856 -821
913 1000
-457 725
-982 -948
622 -129
-379 810
29 692
85 357
958 894
-458 -666
-129 843
-649 725
365 -71
10 587
-482 247
-734 -499
412 976
530 -706
-954 -219
-345 -852
314 242
322 535
131 -882
923 61
-218 927
806 466
191 203
-643 -814
240 -922
-195 -458
-923 198
684 -645
-864 -396
-783 303
303 883
-205 -930
536 3
-363 -512
265 309
46 -470
-675 -100
514 -768
-612 -430
-240 488
773 -247
797 -773
-267 399
875 -23
453 210
-891 624
990 770
-459 725
265 415
160 -515
-78 -927
411 -983
-804 941
316 295
99 -286
231 887
-898 238
596 -748
-525 710
-901 -809
-1 608
778 -258
847 -96
-774 -146
-941 -879
213 692
683 -462
-762 -995
193 -519
-210 -617
-828 315
310 599
-388 897
393 457
166 889
759 -110
527 47
-5 -797
-337 553
874 -978
86 -102
628 -954
149 850
470 -824
-494 -276
-173 -697
-409 254
-987 716
-884 -346
419 -493
863 -600
-567 744
-229 173
135 -404
786 934
915 -672
-973 399
-716 365
398 80
140 -708
691 157
-860 -798
-262 -362
983 771
935 395
143 -423
726 -412
209 426
237 -263
485 -13
624 281
-409 974
321 -281
113 -83
-749 -723
981 -806
-235 -411
377 489
829 652
985 675
367 -194
-417 -15
168 803
-377 614
592 540
15 475
-933 782
-907 -259
905 179
-983 584
-834 583
644 811
113 475
180 -957
983 256
912 260
381 27
-960 -958
-583 -648
532 -426
-593 481
727 94
-498 711
-759 785
-758 623
588 -262
-26 192
-32 -115
866 593
-911 839
-328 -623
86 -273
-816 608
-279 -24
87 -266
-858 451
-625 -533
-772 831
144 942
-387 30
-204 -96
-903 -593
-620 -39
-231 -924
-177 -839
22 -516
711 -787
-971 -290
482 -227
509 -595
-724 -379
716 -88
859 -332
-768 322
642 -804
146 -733
492 -302
276 -76
668 534
996 -811
-495 974
466 254
-164 -132
113 -689
82 -376
-710 378
275 -476
-826 370
551 105
885 199
713 -316
304 -92
374 975
812 -484
-741 -272
-19 134
-694 -706
-766 599
879 184
919 -960
129 -327
471 881
-873 -584
-49 -958
812 -790
342 638
57 721
-147 -232
63 -27
-122 225
-882 644
-842 -764
350 -47
602 -445
112 -766
-862 -845
-480 973
553 213
859 459
-744 -102
934 -970
-604 903
-461 983
-134 -967
-256 547
-172 -71
178 374
679 429
744 336
445 -228
211 732
-611 -353
468 -809
897 -415
159 434
-810 385
336 -212
555 182
-52 -887
-981 -753
-658 -131
-222 -716
-515 336
-307 -281
376 -902
417 341
-538 745
475 -942
114 302
675 -667
-736 -614
-277 -612
438 -265
927 -627
851 730
-276 808
-74 556
-693 518
357 -463
361 -264
170 863
-748 337
226 597
594 723
-404 407
893 573
296 64
-968 -826
776 -117
306 -984
-38 22
-26 116
868 743
-657 -608
509 690
123 141
-742 -569
520 -659
396 -593
220 745
-217 243
989 -824
-797 876
-71 93
571 697
-298 -142
-628 704
835 244
42 70
104 -792
922 -12
888 -402
-346 -364
-394 -710
-815 -414
-586 607
882 745
312 610
716 912
-129 -292
63 337
-927 427
343 -997
-148 980
-884 -963
-157 -186
-891 -20
-921 446
-33 -395
513 230
-319 15
460 768
-551 715
48 -196
667 771
-706 -178
135 572
81 -389
-48 -992
138 744
547 -118
-836 -75
-795 393
5 183
726 203
204 173
-694 570
120 -718
-8 -393
94 -47
967 898
389 -610
11 -633
438 -279
603 120
998 953
331 -735
187 335
-511 924
-270 533
725 105
560 976
-897 94
304 871
-624 -633
222 -406
-207 -282
-144 -160
-470 706
127 937
645 888
852 -244
-291 783
446 -733
577 304
-353 135
-621 679
-413 387
-905 966
588 939
-539 15
814 441
-855 194
436 676
-710 736
738 780
-97 -671
-361 504
661 330
582 -504
422 61
-969 331
55 371
-610 -68
-762 392
173 -382
-461 531
835 215
506 110
102 475
-197 -81
256 292
-253 785
549 745
625 -390
-397 669
662 142
691 -686
-934 212
547 -216
771 -692
-274 -4
338 -695
495 227
384 44
844 670
76 -47
-450 445
-360 650
377 -9
282 -137
849 -130
-132 909
-332 -56
-604 353
-967 -734
262 310
599 348
444 -846
792 178
-970 257
-526 125
-174 689
-124 617
-796 -587
-88 -608
847 131
546 118
482 747
7 -420
-424 443
-218 64
-150 599
-287 -465
-920 556
-629 -944
-984 -512
-146 -159
-388 839
833 418
-101 147
321 833
156 464
-234 9
698 -80
348 303
333 -775
971 -765
-883 -358
-608 -86
598 -793
785 -468
20 -793
-411 531
-93 -447
773 -681
797 848
323 190
267 826
-928 -334
-579 716
-526 697
298 844
-294 728
-931 -846
-585 -848
-872 939
860 -153
-836 -850
723 23
967 -429
-927 910
196 -115
-607 983
79 -469
594 365
859 800
-978 652
-879 745
677 -3
553 599
101 -569
-114 -289
263 639
-161 -330
-797 -900
713 748
-80 -275
129 405
202 -802
561 304
540 -573
-751 819
814 799
153 538
696 -201
925 -233
355 -393
762 229
-35 -649
452 4
-22 801
-20 333
-176 622
983 365
1000 731
473 -220
752 -405
-140 454
216 828
-884 -673
-701 88
678 501
763 -491
-835 -394
-13 -777
27 -402
-742 -69
-483 952
447 808
798 320
301 -142
-840 -201
742 -361
707 -444
325 151
-119 827
649 -430
-588 92
-834 942
713 591
-175 538
-217 -464
-795 -449
979 666
-446 658
-23 981
952 -402
142 -183
216 761
909 -309
448 -250
146 897
-974 109
416 -422
781 448
774 -679
605 -990
-607 -514
850 136
640 846
-616 -923
782 805
-29 -287
-418 770
-519 -198
887 16
-870 -999
-563 555
727 986
654 -878
-889 -13
-510 5
-563 201
-414 -570
147 603
-632 841
923 250
-299 801
-93 -536
40 -490
-787 -482
-361 58
-223 -91
345 2
283 -532
-105 452
419 -474
752 879
-613 -143
-407 -695
-24 -790
-181 -630
-218 -859
816 868
604 -642
980 768
92 421
645 -318
341 283
302 -262
-251 758
-261 -549
640 -807
111 -774
965 -434
-446 -805
-421 -396
673 -573
805 428
595 -150
349 -501
479 -984
-82 980
971 -789
-80 471
-868 -454
-343 -156
-954 202
891 266
-289 566
678 -727
-334 -936
846 -11
-699 -777
-670 369
-270 169
235 619
-625 861
-476 507
805 -287
-354 456
-430 -799
86 -112
755 248
-869 566
-496 274
-505 -877
160 831
-238 -846
474 -564
483 231
164 -648
807 117
-35 104
791 616
840 119
-42 7
718 875
-747 -799
923 765
872 -617
-439 286
926 256
-227 30
-133 619
64 830
403 188
-325 788
-28 -57
465 -13
-882 457
654 618
-201 -199
-335 372
902 -129
727 -605
-735 -9
49 -735
556 253
614 -381
411 475
748 -626
142 -192
-627 287
729 -368
-629 -735
208 -822
-178 -171
898 -709
790 -934
998 -522
-623 -689
446 -546
-783 283
-411 -17
13 -805
-679 -218
-177 -772
907 -638
-918 482
815 -200
181 -972
498 760
13 510
547 799
350 152
216 283
873 -126
913 -905
-956 -420
887 90
779 -678
-368 -744
162 -653
-752 411
745 -697
898 826
-330 690
434 -961
-404 -400
573 -885
0 -506
117 -324
-515 351
876 -918
761 -845
395 -614
-545 -785
903 311
-831 656
-501 -676
-216 875
202 -473
-300 599
-139 394
-508 924
196 710
603 -814
-773 -228
-641 968
224 -273
-286 -226
211 497
523 -399
-218 30
-374 -33
724 372
-709 -615
-759 -81
-503 -984
-553 307
-100 554
912 -886
928 31
719 567
760 -244
-443 -527
441 131
934 283
-783 -653
-966 -799
265 544
-876 866
-632 575
-830 179
-715 -527
136 176
-836 -424
-851 -238
361 601
-165 -21
-100 -119
-629 725
-212 341
536 690
233 111
944 -223
851 -950
-577 -324
715 -496
284 379
691 -655
918 -919
-895 905
770 298
921 -838
-32 -454
-842 828
-873 600
-844 219
-75 -471
765 -925
301 623
131 -414
442 928
990 -942
-329 650
-659 354
-810 -261
808 -596
351 332
883 660
103 146
684 -948
-663 -193
650 120
-729 -705
591 -895
719 106
457 -352
909 -321
-215 548
-778 193
422 -255
-648 647
-192 292
320 -301
-202 -910
-388 -374
-45 545
395 544
656 752
64 538
594 715
899 -926
507 111
723 207
512 732
937 499
955 -897
-85 -271
-212 -295
691 -551
-96 459
411 650
286 942
-27 -427
1 222
341 -639
138 944
-897 849
699 -119
-287 744
32 23
893 680
210 255
-575 -657
-65 557
-280 -627
737 896
327 -419
880 -50
-445 -63
-277 -943
-142 833
-957 59
93 262
-523 509
130 843
973 721
-920 221
270 432
-94 713
-945 430
-145 509
394 -827
-850 334
654 918
568 795
160 935
817 -318
-546 462
-864 36
-98 -922
-741 663
-467 -567
985 -354
782 203
-701 553
25 768
456 -374
703 102
837 970
412 937
-382 -26
-145 -580
172 -439
409 -8
-345 -673
64 -67
75 747
609 477
-677 310
218 509
-760 392
-704 -895
460 -30
-858 411
80 -566
-316 690
540 -23
-597 -91
-203 -818
122 -184
159 898
197 573
9 -183
775 -989
598 -853
-530 -749
-726 433
712 -748
-669 -410
843 -270
-706 -203
-726 -350
-714 -91
-626 645
-90 2
914 -170
757 110
601 -768
25 -753
811 202
-416 145
-866 -945
-933 -573
-730 -735
-986 -466
-903 -724
-281 -866
970 898
-875 269
552 -27
-852 566
-129 407
230 -388
968 692
-710 -562
292 -465
-480 402
-938 -469
345 631
287 -769
-967 992
-880 256
-30 993
510 863
791 -527
-430 352
758 -931
989 -251
-338 -627
-422 -668
126 362
-19 -470
-940 -972
-193 -19
0 -815
-267 -524
-762 -80
-25 -625
303 232
287 543
-615 188
340 346
-878 -601
168 116
-252 -257
-158 610
52 863
-259 969
-219 -899
-211 -181
-200 -231
377 220
116 395
-567 -557
-255 -836
-373 195
-569 -383
882 -256
734 -3
-344 641
442 -411
818 293
382 113
835 216
985 139
540 511
-924 881
913 -35
538 275
-226 174
-321 -593
-858 698
-591 -801
985 -227
394 -198
-578 139
-184 961
-117 -720
-571 618
-689 559
-537 -333
348 -278
-760 801
-720 -713
958 -856
842 705
-675 -274
242 -759
-577 -554
5 842
840 30
919 945
884 -799
-431 -110
113 -395
-281 -633
608 927
810 -454
747 -216
634 -487
-983 546
-364 339
478 603
-517 -526
644 452
15 -300
-129 293
-380 -418
-707 742
-268 817
725 880
548 -30
398 -600
549 -193
626 -811
430 664
-395 329
120 -211
674 729
-620 673
746 647
460 -685
-950 -121
-232 212
-567 -618
-102 462
770 -634
34 561
237 618
-770 -358
-191 81
-431 -645
-459 785
261 791
-1000 228
677 -113
-638 627
323 69
-199 400
-598 -570
306 -295
-381 -911
-752 487
136 -777
619 -864
-67 821
465 -423
320 -86
781 -12
630 -312
-667 657
678 -426
-744 -146
-801 -968
782 585
761 -643
482 339
506 783
523 -416
416 -784
-420 -637
-493 -292
-129 -700
291 -707
545 -927
56 252
488 694
-900 -533
-569 534
-906 185
-56 244
864 990
815 -596
453 -384
745 -122
531 334
12 -723
112 382
-554 -337
112 968
740 262
632 2
536 336
557 727
67 266
-961 211
-664 -757
526 -829
-859 240
257 690
-972 930
379 -250
306 653
-613 -978
-751 263
987 769
492 -514
759 931
-91 -364
-389 880
672 -190
934 244
227 831
-580 -594
-420 -389
-726 -348
219 172
713 -418
-629 -778
-52 -860
449 441
-573 659
929 309
973 -666
-474 712
133 69
75 -965
-98 -505
415 31
433 268
-547 -439
720 -468
656 527
913 990
-857 65
244 -953
-226 -704
-465 -366
431 956
747 -905
63 526
-534 147
-71 72
-487 21
281 493
-513 873
-844 640
-496 -370
Czy ktoś wie jak mogę usprawnić swój program aby takie długie też pliki także przetwarzał?