Pagini recente » Cod sursa (job #2151357) | Cod sursa (job #2620611) | Cod sursa (job #2605753) | Cod sursa (job #1216716) | Cod sursa (job #110215)
Cod sursa(job #110215)
#include <stdio.h>
char s[30] , ch, final[16000];
long int nrs[4000], i, l, p, j, pfinal;
FILE *f;
void citire(){
p=-1; l=0;
f=fopen("ordine.in", "r");
while(!feof(f)){
fscanf(f, "%c", &ch);
if(feof(f)!=0){break;}
l++;
if(p==-1){p++; s[p]=ch;nrs[p]=1;}
else if (s[p]==ch){nrs[p]++;}
else if(s[p]>ch){
// gasesc pozitia in tabloul s unde trebuie inserat ch
i=p;
while(s[i]>ch && i>=0) {i--;}
if(s[i]==ch &&i>=0){nrs[i]++;}
else{
p++;
for(j=p; j>i+1; j--){
s[j]= s[j-1];
nrs[j]= nrs[j-1];
}
s[i+1]=ch;
nrs[i+1]=1;
}
}
else if (s[p]<ch && p>=0){ p++; s[p]=ch; nrs[p]=1;}
}
fclose(f);
}
void afisare(){
int gata; char cprec;
gata=0;
pfinal=0;
f=fopen("ordine.out", "w");
final[0]=s[0];
cprec=s[0]; nrs[0]--;
while(gata==0){
i=0;
while ((i<=p) && (s[i]==cprec || nrs[i]==0) ){
i++;
}
if(i<=p){
pfinal++;
final[pfinal]=s[i];
nrs[i]--;
cprec=s[i];
}
if(i>p){gata=1;}
}
if(pfinal<l){
// aflu ce caracter a ramas neadaugat
char c;
i=p;
while(i>=0 && nrs[i]==0){i--;}
//caracterul s[i] va trebui inserat
while(nrs[i]!=0){
j=pfinal;
while(j>=0 && final[j]==s[i]){j=j-2;}
// inseram caracterul s[i] pe poz j
pfinal++;
long int k;
for(k=pfinal; k>=j+2; k--){
final[k]=final[k-1];
}
final[j+1]=s[i];
nrs[i]--;
}
}
for(i=0; i<=pfinal; i++){
fprintf(f, "%c", final[i]);
}
fclose(f);
}
int main(){
citire();
afisare();
return 0;
}