merhaba çözemediğim bir problemim var.acaba yardımcı olurmusun aşağıdaki C dilinde yazılmış programın akış şemasını çizermisin ilgilendiğiniz için teşekkürederim.
1.SORU
#include <stdio.h>
#include <stdlib.h>
int **hisse;
int sirket;
FILE *myfile;
struct listnode{
int pos;
int hisse;
struct listnode* ileri;
};
typedef struct listnode Listnode;
typedef Listnode* listnodeptr;
struct list{
listnodeptr bas;
int sayi;
};
typedef struct list List;
typedef List* listptr;
listptr liste_uret()
{
listptr mylist=(listptr)malloc(sizeof(List));
mylist->sayi=0;
mylist->bas=NULL;
return mylist;
}
void liste_bosalt(listptr mylist)
{
listnodeptr mynode=mylist->bas,sonranode;
while (mynode)
{
sonranode=mynode->ileri;
free(mynode);
mynode=sonranode;
}
mylist->sayi=0;
mylist->bas=NULL;
}
void listeye_ekle(int pos, int hisse, listptr mylist)
{
listnodeptr mynode=(listnodeptr)malloc(sizeof(Listnode));
mynode->pos=pos;
mynode->hisse=hisse;
mynode->ileri=NULL;
if (mylist->bas==NULL)
mylist->bas=mynode;
else
{
mynode->ileri=mylist->bas;
mylist->bas=mynode;
}
mylist->sayi++;
}
void listeye_node_ekle(listnodeptr mynode, listptr mylist)
{
if (mylist->bas==NULL)
mylist->bas=mynode;
else
{
mynode->ileri=mylist->bas;
mylist->bas=mynode;
}
mylist->sayi++;
}
void hisseleri_oku()
{
int loop,loop1,sirket1,sirket2,hissesi;
myfile=fopen("sirket.dat","r");
if (!myfile)
{
printf("File can not be opened for reading\n");
exit(0);
}
fscanf(myfile,"%d\n",&sirket);
hisse=(int **)malloc(sirket*sizeof(int *));
for (loop=0;loop<sirket;loop++)
{
hisse[loop]=(int *)malloc(sirket*sizeof(int));
for (loop1=0;loop1<sirket;loop1++)
hisse[loop][loop1]=0;
}
while (fscanf(myfile,"%d %d %d\n",&sirket1,&sirket2,&hissesi)!=EOF)
hisse[sirket1-1][sirket2-1]=hissesi;
fclose(myfile);
}
void kim_kime_sahip2()
{
int loop,loop1;
listptr durum=liste_uret();
listptr yeni_sahip_oldugu_hisseler=liste_uret();
listptr sahip_oldugu_hisseler=liste_uret();
listnodeptr mynode,secondnode,oncenode;
myfile=fopen("sirket.coz2","w");
if (!myfile)
{
printf("File can not be opened for writing\n");
exit(0);
}
for (loop=0;loop<sirket;loop++)
{
for (loop1=0;loop1<sirket;loop1++)
if (loop1!=loop)
if (hisse[loop][loop1]>50)
listeye_ekle(loop1,hisse[loop][loop1],yeni_sahip_oldugu_hisseler);
else
listeye_ekle(loop1,hisse[loop][loop1],durum);
while (yeni_sahip_oldugu_hisseler->sayi>0)
{
mynode=yeni_sahip_oldugu_hisseler->bas;
while (mynode)
{
secondnode=durum->bas;
while (secondnode)
{
secondnode->hisse+=hisse[mynode->pos][secondnode->pos];
secondnode=secondnode->ileri;
}
secondnode=mynode->ileri;
mynode->ileri=NULL;
listeye_node_ekle(mynode,sahip_oldugu_hisseler);
mynode=secondnode;
}
yeni_sahip_oldugu_hisseler->bas=NULL;
yeni_sahip_oldugu_hisseler->sayi=0;
oncenode=NULL;
mynode=durum->bas;
while (mynode)
{
if (mynode->hisse>50)
{
secondnode=mynode->ileri;
mynode->ileri=NULL;
listeye_node_ekle(mynode,yeni_sahip_oldugu_hisseler);
if (oncenode==NULL)
durum->bas=secondnode;
else
oncenode->ileri=secondnode;
mynode=secondnode;
}
else
{
oncenode=mynode;
mynode=mynode->ileri;
}
}
}
mynode=sahip_oldugu_hisseler->bas;
while (mynode)
{
fprintf(myfile,"%d %d\n",loop+1,mynode->pos+1);
mynode=mynode->ileri;
}
liste_bosalt(durum);
liste_bosalt(sahip_oldugu_hisseler);
liste_bosalt(yeni_sahip_oldugu_hisseler);
}
fclose(myfile);
}
void kim_kime_sahip()
{
int loop,loop1,loop2;
int *sahiplik=(int *)malloc(sirket*sizeof(int)),yenisahip;
int *durum=(int *)malloc(sirket*sizeof(int));
int *yeni_sahip_oldugu_hisseler=(int *)malloc(sirket*sizeof(int)),index;
myfile=fopen("sirket.coz","w");
if (!myfile)
{
printf("File can not be opened for writing\n");
exit(0);
}
for (loop=0;loop<sirket;loop++)
{
yenisahip=0;
for (loop1=0;loop1<sirket;loop1++)
{
sahiplik[loop1]=hisse[loop][loop1];
if (sahiplik[loop1]>50)
{
durum[loop1]=1;
yeni_sahip_oldugu_hisseler[yenisahip]=loop1;
yenisahip++;
}
else
durum[loop1]=0;
}
while (yenisahip>0)
{
for (loop1=0;loop1<yenisahip;loop1++)
{
index=yeni_sahip_oldugu_hisseler[loop1];
for (loop2=0;loop2<sirket;loop2++)
sahiplik[loop2]+=hisse[index][loop2];
}
yenisahip=0;
for (loop1=0;loop1<sirket;loop1++)
if ((sahiplik[loop1]>50)&&(durum[loop1]==0))
{
durum[loop1]=1;
yeni_sahip_oldugu_hisseler[yenisahip]=loop1;
yenisahip++;
}
}
for (loop1=0;loop1<sirket;loop1++)
if ((durum[loop1]==1)&&(loop!=loop1))
fprintf(myfile,"%d %d\n",loop+1,loop1+1);
}
fclose(myfile);
}
void main()
{
hisseleri_oku();
kim_kime_sahip();
kim_kime_sahip2();
}
2.SORU
#include<stdio.h>
#include<stdlib.h>
#include<values.h>
int n;
int **matris,**kaplama;
FILE *myfile;
int *eslendir;
void ucret_matrisi_oku()
{
int loop,loop1;
myfile=fopen("input.txt","r");
if (!myfile)
{
printf("File can not be opened for reading\n");
exit(0);
}
fscanf(myfile,"%d\n",&n);
matris=(int **)malloc(n*sizeof(int *));
kaplama=(int **)malloc(n*sizeof(int *));
eslendir=(int *)malloc(n*sizeof(int));
for (loop=0;loop<n;loop++)
{
eslendir[loop]=-1;
matris[loop]=(int *)malloc(n*sizeof(int));
kaplama[loop]=(int *)malloc(n*sizeof(int));
for (loop1=0;loop1<n;loop1++)
fscanf(myfile,"%d",&(matris[loop][loop1]));
}
fclose(myfile);
}
void satir_sutunlari_sifirla()
{
int loop,loop1,min;
for (loop=0;loop<n;loop++)
{
min=MAXINT;
for (loop1=0;loop1<n;loop1++)
if (matris[loop][loop1]<min)
min=matris[loop][loop1];
if (min!=0)
for (loop1=0;loop1<n;loop1++)
matris[loop][loop1]-=min;
}
for (loop=0;loop<n;loop++)
{
min=MAXINT;
for (loop1=0;loop1<n;loop1++)
if (matris[loop1][loop]<min)
min=matris[loop1][loop];
if (min!=0)
for (loop1=0;loop1<n;loop1++)
matris[loop1][loop]-=min;
}
}
int minimum_koleksiyon()
{
int loop,loop1,kaplanmayansifir=0,sayac,max,maxindex,res=0;
for (loop=0;loop<n;loop++)
for (loop1=0;loop1<n;loop1++)
if (matris[loop][loop1]==0)
{
kaplama[loop][loop1]=2;
kaplanmayansifir++;
}
else
kaplama[loop][loop1]=0;
while (kaplanmayansifir>0)
{
max=0;
for (loop=0;loop<n;loop++)
{
sayac=0;
for (loop1=0;loop1<n;loop1++)
if (kaplama[loop][loop1]==2)
sayac++;
if (sayac>max)
{
max=sayac;
maxindex=loop;
}
}
for (loop=0;loop<n;loop++)
{
sayac=0;
for (loop1=0;loop1<n;loop1++)
if (kaplama[loop1][loop]==2)
sayac++;
if (sayac>max)
{
max=sayac;
maxindex=loop+n;
}
}
res++;
if (maxindex<n)
{
for (loop=0;loop<n;loop++)
if (kaplama[maxindex][loop]==2)
{
kaplama[maxindex][loop]=3;
kaplanmayansifir--;
}
else
if (kaplama[maxindex][loop]<=0)
kaplama[maxindex][loop]--;
}
else
{
for (loop=0;loop<n;loop++)
if (kaplama[loop][maxindex-n]==2)
{
kaplama[loop][maxindex-n]=3;
kaplanmayansifir--;
}
else
if (kaplama[loop][maxindex-n]<=0)
kaplama[loop][maxindex-n]--;
}
}
return res;
}
void matris_degistir()
{
int loop,loop1,min=MAXINT;
for (loop=0;loop<n;loop++)
for (loop1=0;loop1<n;loop1++)
if ((kaplama[loop][loop1]==0)&&(matris[loop][loop1]<min))
min=matris[loop][loop1];
for (loop=0;loop<n;loop++)
for (loop1=0;loop1<n;loop1++)
if (kaplama[loop][loop1]==0)
matris[loop][loop1]-=min;
else
if (kaplama[loop][loop1]==-2)
matris[loop][loop1]+=min;
}
void bagimsiz_sifir_bul()
{
int loop,loop1,loop2,min,minindex,sayac,minpos;
for (loop2=0;loop2<n;loop2++)
{
min=MAXINT;
for (loop=0;loop<n;loop++)
if (eslendir[loop]==-1)
{
sayac=0;
for (loop1=0;loop1<n;loop1++)
if (matris[loop][loop1]==0)
sayac++;
if (sayac<min)
{
min=sayac;
minindex=loop;
if (min==1)
break;
}
}
for (loop=0;loop<n;loop++)
if (matris[minindex][loop]==0)
{
minpos=loop;
eslendir[minindex]=minpos;
break;
}
for (loop=0;loop<n;loop++)
if (matris[minindex][loop]==0)
matris[minindex][loop]=1;
for (loop=0;loop<n;loop++)
if (matris[loop][minpos]==0)
matris[loop][minpos]=1;
}
}
void sonuc_yaz()
{
int loop;
myfile=fopen("output.txt","w");
if (!myfile)
{
printf("File can not be opened for writing\n");
exit(0);
}
for (loop=0;loop<n;loop++)
fprintf(myfile,"%d ",eslendir[loop]+1);
fclose(myfile);
}
void main()
{
int k;
ucret_matrisi_oku();
satir_sutunlari_sifirla();
k=minimum_koleksiyon();
while (k<n)
{
matris_degistir();
k=minimum_koleksiyon();
}
bagimsiz_sifir_bul();
sonuc_yaz();
}