Matris Form Dönüşümü // C kod örneği

Başlatan sem, 18 Ocak 2011 - 22:00:03

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sem

Benim işime yaramıştı, belki işine yarayan olur diye paylaşıyorum, program olarak olmasa da belki kod örneği olarak incelemek isteyen arkadaşlar olabilir...

1. formdan kasıt:
1 2 3 4 5...
6 7 8 9 10...
11 12 13 14 15...
...


2. formdan kasıt:
0 0 1
0 1 2
0 2 3
...

Bu iki form arasında dönüşüm yapıyor program... Benim Jeofizikte Manyetik Yöntemde işime yaramıştı... Hocadan aldığımız bir program 1. formda bir metin dosyasını alarak anomalisini (aşağı analitik uzanım/ yukarı analitik uzanım) çıkartıyordu (program çalışmıyordu da neyse, daha sonra C ile aşağı/yukarı analitik uzanım değerlerini hesaplayarak Matlab çıktısı üreten program yazmak zorunda kalmıştım, eğer bulursam onu da paylaşırım)... Biz haritalanmış veriyi 2. formda sayısallaştırmıştık (programın 1. formda çalıştığını daha doğrusu çalışmadığını bilmiyorduk =)).  O nedenle işime yaramıştı...

matris.c
/*
* matris.c
*
*  Created on: Jan 18, 2011
*      Author: sem0900
*/


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <unistd.h>


void birinciden_ikinciye(const char *kaynak)
{
FILE *okunan, *yazilan;
char * hedef;
int deger, i, j, kontrol;

if((access(kaynak, 0))){
fprintf(stdout, "Dosya bulunamadı: %s\n", kaynak);
return;
}


hedef = (char *)calloc(206, sizeof(char));
sprintf(hedef, "%s.1->2", kaynak);

if((okunan = fopen(kaynak, "r")) == NULL){
fprintf(stdout, "Dosya açılamadı:%s\n", kaynak);
exit(EXIT_FAILURE);
}

if((yazilan = fopen(hedef, "w")) == NULL){
fprintf(stdout, "Dosya oluşturulamadı:%s\n", hedef);
exit(EXIT_FAILURE);
}

for(i = 0; !feof(okunan) ; ++i){
for(j = 0;; ++j){
fscanf(okunan, "%d", &deger);
if(feof(okunan))
break;
fprintf(yazilan, "%d   %d   %d\n", i, j, deger);

kontrol = fgetc(okunan);
if(kontrol == '\n'){
break;
}
}
}
fprintf(stdout, "Matris kaydedildi: %s\n", hedef);

free(hedef);
fclose(okunan);
fclose(yazilan);

}

void ikinciden_birinciye(const char *kaynak)
{
FILE *okunan, *yazilan;
char * hedef;
int deger, i, j, ikontrol, jkontrol;

if((access(kaynak, 0))){
fprintf(stdout, "Dosya bulunamadı: %s\n", kaynak);
return;
}


hedef = (char *)calloc(206, sizeof(char));
sprintf(hedef, "%s.2->1", kaynak);

if((okunan = fopen(kaynak, "r")) == NULL){
fprintf(stdout, "Dosya açılamadı:%s\n", kaynak);
exit(EXIT_FAILURE);
}

if((yazilan = fopen(hedef, "w")) == NULL){
fprintf(stdout, "Dosya oluşturulamadı:%s\n", hedef);
exit(EXIT_FAILURE);
}

fscanf(okunan, "%d%d%d", &ikontrol, &jkontrol, &deger);
i = ikontrol;
j = jkontrol;

for(;!feof(okunan);){
fprintf(yazilan, "%d", deger);
fscanf(okunan, "%d%d%d", &i, &j, &deger);
if(jkontrol == j - 1){
fprintf(yazilan, " ");
++jkontrol;
}
if(ikontrol == i - 1){
fprintf(yazilan, "\n");
++ikontrol;
jkontrol = 0;
}
}
    fprintf(stdout, "Matris kaydedildi: %s\n", hedef);
free(hedef);
fclose(okunan);
fclose(yazilan);

}

int main()
{
char *kaynak;
int secim, k;

kaynak = (char *)calloc(200, sizeof(char));

while(1)
{
fprintf(stdout, "1.) Birinci formdan ikinci forma dönüşüm\n2.) İkinci formdan birinci forma dönüşüm\n3.) Çıkış\n\nSeçim:");
fscanf(stdin, "%d", &secim);
getchar();

if(secim == 1 || secim == 2){
fprintf(stdout, "Kaynak Dosya:");
fgets(kaynak, 200, stdin);
}

//fgets ile alınan satır sonu karakteri siliniyor
k = strlen(kaynak);
kaynak[k - 1] = '\0';

if(secim == 1){
birinciden_ikinciye(kaynak);
continue;
}
if(secim == 2){
ikinciden_birinciye(kaynak);
continue;
}
if(secim == 3)
    break;
else{
fprintf(stdout, "Yanlış Seçim\n");
sleep(1);
}


}
free(kaynak);
return 0;
}



Ufak Denemesi:
Alıntı Yap1.) Birinci formdan ikinci forma dönüşüm
2.) İkinci formdan birinci forma dönüşüm
3.) Çıkış

Seçim:1
Kaynak Dosya:/home/sem0900/Desktop/matris
Matris kaydedildi: /home/sem0900/Desktop/matris.1->2
1.) Birinci formdan ikinci forma dönüşüm
2.) İkinci formdan birinci forma dönüşüm
3.) Çıkış

Seçim:2
Kaynak Dosya:/home/sem0900/Desktop/matris.1->2
Matris kaydedildi: /home/sem0900/Desktop/matris.1->2.2->1
1.) Birinci formdan ikinci forma dönüşüm
2.) İkinci formdan birinci forma dönüşüm
3.) Çıkış

Seçim:3

Kullandığım dosya içerikleri;

/home/sem0900/Desktop/matris
23 54 67 87 89 76 12 12 21 45 76 56 54
11 12 13 14 15 16 43 44 66 66 100 1000 123
43 54 65 45 32 12 65 76 34 2 3 4 1
100 192 129 219 432 543 231 654 765 777 444 333 222


Dönüştürülen: /home/sem0900/Desktop/matris.1->2
0   0   23
0   1   54
0   2   67
0   3   87
0   4   89
0   5   76
0   6   12
0   7   12
0   8   21
0   9   45
0   10   76
0   11   56
0   12   54
1   0   11
1   1   12
1   2   13
1   3   14
1   4   15
1   5   16
1   6   43
1   7   44
1   8   66
1   9   66
1   10   100
1   11   1000
1   12   123
2   0   43
2   1   54
2   2   65
2   3   45
2   4   32
2   5   12
2   6   65
2   7   76
2   8   34
2   9   2
2   10   3
2   11   4
2   12   1
3   0   100
3   1   192
3   2   129
3   3   219
3   4   432
3   5   543
3   6   231
3   7   654
3   8   765
3   9   777
3   10   444
3   11   333
3   12   222


Tekrar Dönüştürülen: /home/sem0900/Desktop/matris.1->2.2->1    ==>>matris dosyası aynı doğal olarak
23 54 67 87 89 76 12 12 21 45 76 56 54
11 12 13 14 15 16 43 44 66 66 100 1000 123
43 54 65 45 32 12 65 76 34 2 3 4 1
100 192 129 219 432 543 231 654 765 777 444 333 222



Ben böyle ufak bir deneme yaptım... Deneme yapıp da hata alan arkadaşlar bildirirse düzeltirim...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?