Dosya içerisinde bulunan ve formatı belli sayılar arasında en çok tekrar edenleri bulup ekrana yazdıran c program kodu.
Dosya ile verilmiş sayılar arasında her satırın sonundaki sayılarda en çok tekrar edenleri ekrana yazdıran c kodu.
Sorunun orjinali için tıklayınız…
NOT: Her satır bitiminde sayede sayı olması gerekli. Boşluk ile bitemez. Ayrıca program kodunun yanında dosya.txt bulunması gerekli!
C Program Kodu:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
//Dosyadan veriler okunur
FILE *file = fopen("dosya.txt", "r"); // Dosyayı okuma modunda açar!!! (r = read)
char dizi[100]; //Dosyadaki verileri almak için
char kaydet[50][100]; //Alınan verileri saklamak için
int x=0, indis=0; //Toplam satır sayısı
int sayilar[50][1]; //Dosyadan alınan verilerin her satırdaki son sayılar bu diziye atılacak!
while(!feof(file)){
fgets(dizi, 100, (FILE*)file); //Dosyadan Satır satır verileri alır ve dizi'ye kaydeder
strcpy(kaydet[x], dizi); //dizideki elemanı kaydet isimli dizinin x'inci indisine kaydeder. (0 dan toplam satıra kadar)
x++; // indis 1 artar
}
for(int i=0; i<x; i++){ // her satırdaki son sayıları alma işlemi
int veri = 0; //indis için kullanılacak
// Satırda kaç karakter olduğunu bulur!
while(kaydet[i][veri] != '\n' && (kaydet[i][veri] <= 57 && kaydet[i][veri] >= 48 || kaydet[i][veri] == ' ')){
veri++;
}
int sayi=0, basamak=1;
int j=veri-1;
while(kaydet[i][j] != ' ' && veri != 0 ){
if(kaydet[i][j] <= 57 && kaydet[i][j] >= 48){
sayi += basamak * (kaydet[i][j] - '0');
basamak *= 10;
j--;
}
}
// Dosyadaki her satırın son basamağı sayilar dizisine kayıt edilir
if(veri != 0 && 1==1){
sayilar[indis][1] = sayi;
indis++; // kaç tane kayıt edildiği bu değişken ile tutuluyor
}
}
int sayac; // her sayıdan kaç tane olduğunu sayac ile bulunur
int tekrarAdet = 1; // Maksimum tekrar bu değişkene atanılır
// En fazla tekrar eden sayı adeti bulunur
for(int i=0; i<indis; i++){
sayac = 0;
for(int j=i; j<indis; j++){
if(sayilar[i][1] == sayilar[j][1])
sayac++;
}
if(sayac > tekrarAdet)
tekrarAdet = sayac;
}
//Sayı adeti bulunmuştur....
//En fazla tekrar eden sayı adetine sahip tüm sayılar ekrana yazdırılır
for(int i=0; i<indis; i++){
sayac = 0;
for(int j=i; j<indis; j++){
if(sayilar[i][1] == sayilar[j][1])
sayac++;
}
if(sayac == tekrarAdet)
printf("%d adet %d\n", tekrarAdet, sayilar[i][1]);
}
fclose(file); // Dosya kapatılır
printf("\n");
system("pause");
return 0;
}
|
dosya.txt içeriği:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
0 37 0 0
0 55 1 3
1 61 2 5
1 67 3 5
1 90 3 5
2 45 0 5
2 75 2 7
3 01 1 5
3 12 3 10
4 15 0 0
4 21 0 1
5 17 2 7
|