Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шпора для ВМСиС, 1ый семестр (Луцик ЮА)

.doc
Скачиваний:
88
Добавлен:
15.06.2014
Размер:
221.18 Кб
Скачать

Перевод в другую сс

int ss;

char ms[20];

char znak=’+’;

void main()

{ int t,i,num1,k1=10,k2=11;

double num;

printf("BBEDITE 4ICLO: ");

scanf("%lf",&num);

printf("BBEDITE TO4HOCTb: ");

scanf("%d",&t);

printf("BBEDITE OCHOBAHIE CC:");

scanf("%d",&ss);

num<0 ? znak=’-’ , num*=-1 : num;

num1=num; //celaia 4astb

num-=num1; //drobnaia 4astb

while(num1>=ss) //na4 zna4enia

{ i=num1%ss; //ostatok ot delenia

num1/=ss; //celaia 4astb ot delenia

ms[k1--]=i>9 ? i-10+’a’ : i+’0’;

}

ms[k1--]=num1>9 ? num1-10+’a’ : num1+’0’;

ms[k1]=znak;

ms[k2++]=’.’;

while(num!=0 && k2-11<=t)

{ num=(num*=ss,i=num,num-=i);

ms[k2++]=i>9 & i-10+’a’ : i+’0’; }

for(i=k1;i<k2;i++)

printf(“%c”,ms[i]);

}

Перевод в другую сс рекурсивно

char* f(int n, int k, int p, char*s);

main()

{int n, p, k, n1;

char *s;

printf("Enter n, p: ");

scanf("%d%d", &n, &p);

k=0;

n1=n;

while (n>0)

{ n/=p;

++k; }

s=(char*) calloc(k+1, sizeof(char));

s=f(n1, k-1, p, s);

printf("Result: \n");

puts(s);

free(s);

getch();

return 0;}

char* f(int n, int k, int p, char*s)

{ int ost;

if (n>0)

{ ost=n%p;

if (ost<10)

{ s[k]=ost+'0';}

else

{s[k]=ost-10+'A';}

f(n/p, k-1, p, s); }

return s;

}

Калькулятор

void main()

{ double res;

int ind=1;

float a,b;

char opr;

do

{

puts("Enter a znak b"); ind=scanf("%f%c%f",&a,&opr,&b);

} while (ind<3);

switch (opr)

{ case '+': res=a+b;break;

case '-': res=a-b;break;

case '*': res=a*b;break;

case '/': res=a/b;break;

default: puts("Error");break;

}

fflush(stdin);

if (ind) printf("Result: %8.3lf",res);

getch();

}

Ввести массив строк.

В каждой найти максимально слово.

int length(char *s)

{ for(int i=0;*(s+i);i++);

return i;}

void main()

{char *str,*word;

int leng,len=0,ch=0;

str=(char*)malloc(256*sizeof(char));

gets(str);

leng=length(str);

*(str+leng)=' ';

int j=0;

for(int i=0;i<leng+1;i++)

{if(*(str+i)!=' ')

ch++;

else if(ch>len)

{len=ch;

word=str+j;

ch=0;

j=i+1;}

else {ch=0;

j=i+1; }

}

printf("\nlen=%d\n",len);

for(i=0;i<len;i++)

printf("%c",*(word+i));

}

Обнулить числа на главной диагонали

#include <stdio.h>

main()

{int a[128][128];

int i, j, n;

scanf("%d", &n);

for (i=0; i<n; ++i)

for (j=0; j<n; ++j)

scanf("%d", &a[i][j]);

for (i=0; i<n; ++i)

for (j=0; j<i; ++j)

if (a[i][i] == a[j][j])

a[i][i] = 0;

for (i=0; i<n; ++i)

{for (j=0; j<n; ++j)

{ printf("%4d", a[i][j]);}

printf("\n"); }

return 0;

}

Поиск слова макс. длины

int beg=0,i=0,j=0;

void main ()

{char *st;

int t=0,num=0,max=0,n;

//razmernost' stroki

scanf("%d",&n);

st=(char*)calloc(n,sizeof(char));

//Vvedite text:");

gets(st);

while(*(st+j))

{num=0;

while (*(st+j)==' ')//propusk probelov

j++;

while(*(st+j)!=' ' && *(st+j))

{num++; //kolichestvo bukv v slove

j++;}

if(max<num)//zapominaem kolichestvo bukv

{max=num; beg=j-max; //zapomnim nachalo slova

num=0;}}

for(i=beg;i<beg+max;i++)

puts(st);

getch();

}

Поиск слова макс. длины и реверс этого слова

double tr(double(*f1)(double),double a,double b,double e,int n)

{double y2=0.,y1,x,h=(b-a)/n;

do{y1=y2;

y2=0.5*((*f1)(a)+(*f1)(b));

for(x=a+h;x<b;x+=h) y2+=(*f1)(x);

y2*=h; h/=2;}while(fabs(y1-y2)>e);

return y2;}

void revers(char*,int);

int beg=0;//nachalo naidennogo slova

int i=0; //indexy

int j=0;

void main ()

{

char *st;

int t=0;

int num=0,max=0;

int n;

clrscr();

puts("Vvedite razmernost' stroki:");

scanf("%d",&n);

if(!(st=(char*)calloc(n,sizeof(char))))

{puts("Malo pamyati!");

getch();

return;}

fflush(stdin);

puts("\nVvedite text:");

get_str(st,n); //do etgo momenta vvod

while(*(st+j))

{ num=0;

while (*(st+j)==' ') //propusk probelov

j++;

while(*(st+j)!=' ' && *(st+j))

{ num++; //kolichestvo bukv v slove

j++;}

if(max<num)//zapominaem kolichestvo bukv

{max=num;

beg=j-max;

//zapomnim nachalo slova

num=0; }

}

i=beg;//peredaem nachalo slova

revers(st,max);

puts(st);

getch(); }

void revers(char *st, int max) //revers

{int t=beg+max-1; //konec slova

char c;

if(i<t && *(st+i) && *(st+i)!=' ')

{c=*(st+i); *(st+i)=*(st+t);*(st+t)=c;

i++;t--;revers(st,max-1);}

}

Поиск слова макс. длины с

помощью функции

int get_str(char*,int);

void main()

{ char *st;

int i,j,k;

int sum,max;

int a,b;//granicy slova

clrscr();

puts("Vvedite razmernost' stroki:");

scanf("%d",&k);

st=(char*)calloc(k,sizeof(char));

if(!st)

{ puts("Malo pamyati!");

return;}

fflush(stdin);

puts("\nVvedite text:");

get_str(st,k);

max=0;

for(i=0;i<k;i++)

{ sum=0;

if(*(st+i)==' ')

i++;

if(*(st+i)!=' ')

{ j=i;

while(*(st+j)!=' ' && *(st+j++))

sum++;

if(max<sum)

{ max=sum;

a=i;

b=j-1;

i=j-1;}

else

i=j-1;} }

printf ("\nKolichestvo bukv v max slove =%d",max);

puts("\nSlovo s max kol-vom bukv:");

for (i=a;i<b+1;i++)

printf("%c",*(st+i));

getch(); }

int get_str(char *st,int k)

{ int c,i=0;

while(--k>0 && (c=getchar())!='\n' && c!=13)

*(st+i++)=c;

*(st+i)='\0';

return i-1;}

2 массива по возрастанию. В третий по убыванию

#define N 6

void swap(int *m,int i,int j)

{int t;

t=m[i];

m[i]=m[j];

m[j]=t;

return;}

void qs(int *m,int l,int r)

{int i,las;

if(l>=r) return;

las=l;

for(i=l+1;i<=r;i++)

if(m[i]<m[l]) swap(m,++las,i);

swap(m,l,las);

qs(m,l,las-1);

qs(m,las+1,r);

return;}

main ()

{int i1,i2,i3,m[N],n[N],mn[N+N];

for(i1=0;i1<N;i1++) scanf("%d",&m[i1]);

for(i2=0;i2<N;i2++) scanf("%d",&n[i2]);

qs(m,0,N-1);

qs(n,0,N-1);

i1=i2=N-1;

i3=0;

while(i1>=0 && i2>=0)

{while(i1>=0 && m[i1]>=n[i2]) mn[i3++]=m[i1--];

while(i2>=0 && m[i1]<n[i2]) mn[i3++]=n[i2--]; }

if(i1>=0) for(;i1>=0;) mn[i3++]=m[i1--];

if(i2>=0) for(;i2>=0;) mn[i3++]=n[i2--];

for(i3=0;i3<N+N;i3++) printf("%d",mn[i3]);

getch ();

return 0;}

}

Отсортировать 2 массива по возрастанию и в третий по убыванию без сортировки. Передать в функцию main.

void sort(long *, int );

main ()

{

long int *a, *b, *c;

int n, m, i, j, k;

printf("Enter n, m: ");

scanf("%d%d", &n, &m);

a = (long*) calloc(n, sizeof(long));

b = (long*) calloc(m, sizeof(long));

c = (long*) calloc(n+m, sizeof(long));

printf("Enter %d elements of A\n", n);

for (i=0; i<n; ++i)

scanf("%ld", &a[i]);

printf("Enter %d elements of B\n", m);

for (i=0; i<m; ++i)

scanf("%ld", &b[i]);

sort(a, n);

sort(b, m);

printf("Sorted A: \n");

for (i=0; i<n; ++i)

printf("%4d", a[i]);

printf("Sorted B: \n");

for (i=0; i<m; ++i)

printf("%4d", b[i]);

i=j=k=0;

while ((i<n) && (j<m))

{

if (a[i]<b[j])

{ c[k]=a[i];

++i;

++k;

}

else

{ c[k]=b[j];

++j;

++k;

}

}

while (i<n)

{ c[k]=a[i];

++i;

++k;

}

while (j<m)

{ c[k]=b[j];

++j;

++k;

}

printf("Result : \n");

for (i=0; i<n+m; i++)

printf("%4d", c[i]);

free(a);

free(b);

free(c);

}

void sort(long *a, int n)

{

int i, j;

long temp;

for (i=n-1; i>0; --i)

for (j=0; j<i; j++)

if (a[j] > a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

Рекурсивный ввод

void rec ()

{

char i;

scanf ("%c", &i);

if (i != '0')

rec ();

else

printf ("Result: ");

printf ("%3c", i);

}

void main ()

{

printf ("Enter numbers: \n");

rec ();

}

Сортировки:

void srt1(int kl,int *ms) // Пузырёк

{ int i,j,m;

for (i=0;i<kl;i++)

for (j=kl;j>i;j--)

if (ms[j-1]>ms[j])

{ m=ms[j-1]; ms[j-1]=ms[j]; ms[j]=m; }}

void srt2(int kl,int *ms) // Метод через отбор

{ int i,j,m,kk;

for (i=0;i<kl-1;i++)

{ m=i;

kk=ms[i];

for (j=i+1;j<kl;j++)

if (ms[j]<kk)

{ m=j; kk=ms[j]; }

ms[m]=ms[i];

ms[i]=kk;

}

}

void srt3(int kl,int *ms) // Метод втавок

{ register int i,j,kk;

for (i=1;i<kl;i++)

{ j=i-1;

kk=ms[i];

while (j>=0 && kk<ms[j]) ms[j-- +1]=ms[j];

ms[j+1]=kk;

}

}

void srt4(int kl,int *ms) // Шейкер

{ int a,b=kl-1,c=1,d=kl-1,i;

do

{ for (i=d;i>=c;i--)

if (ms[i-1]>ms[i])

{ a=ms[i]; ms[i]=ms[i-1]; ms[i-1]=a;

b=i;

}

c=b+1;

for (i=c;i<=d;i++)

if (ms[i-1]>ms[i])

{ a=ms[i]; ms[i]=ms[i-1]; ms[i-1]=a;

b=i;

}

d=b-1;

} while (c<=d);

}

void srt5(int kl,int *ms) // Шелл (quick sort)

{ int i,j,dp,a;

for (dp=kl/2;dp>0;dp/=2)

for (i=dp;i<kl;i++)

for (j=i-dp; j>=0 && ms[j]>ms[j+dp]; j-=dp)

{a=ms[j]; ms[j]=ms[j+dp]; ms[j+dp]=a; }

}

void srt6 (int *a,int l,int r) // Хоар

{ int i,las;

if (l>=r) return;

swap(a,l,(l+r)/2);

las=l;

for (i=l+1;i<=r;i++)

if (a[i]<a[l]) swap(a,++las,i);

swap(a,l,las);

srt6(a,l,las-1);

srt6(a,las+1,r);

}

void swap(int *a,int i,int j)

{ int tmp=a[i];

a[i]=a[j];

a[j]=tmp;

}

void main()

{ clrscr();

int ms1[]={8,5,2,6,7,1,3,4},i;

int ms2[]={8,5,2,6,7,1,3,4};

int ms3[]={8,5,2,6,7,1,3,4};

int ms4[]={8,5,2,6,7,1,3,4};

int ms5[]={8,5,2,6,7,1,3,4};

int ms6[]={8,5,2,6,7,1,3,4};

srt1(7,ms1);

srt2(8,ms2);

srt3(8,ms3);

srt4(8,ms4);

srt5(8,ms5);

srt6(ms6,0,7);

for (i=0;i<8;i++) printf("%3d",ms1[i]); printf("\n");

for (i=0;i<8;i++) printf("%3d",ms2[i]); printf("\n");

for (i=0;i<8;i++) printf("%3d",ms3[i]); printf("\n");

for (i=0;i<8;i++) printf("%3d",ms4[i]); printf("\n");

for (i=0;i<8;i++) printf("%3d",ms5[i]); printf("\n");

for (i=0;i<8;i++) printf("%3d",ms6[i]); printf("\n");

getch();

}

Седловая точка

void main()

{int **p,i,j,k,n,i1,i2,j1,t,m;

//Razmernost' stroki

scanf("%d",&k);

p=(int**)malloc(k*sizeof(int*))))

//Razmernost' stolbca

scanf("%d",&n);

for (i=0;i<n;i++)

*(p+i)=(int*)malloc(n*sizeof(int))

//vvod matricy

for (i=0;i<k;i++)

for (j=0;j<n;j++) scanf("%d",(*(p+i)+j));

/*Poisk sedlovoi tochki*/

for(i=0;i<k;i++)

{

t=*(*(p+i)+0);

i1=i; j1=0;

for(j=1;j<n;j++)

if(*(*(p+i)+j)>t)

{

t=*(*(p+i)+j);

i1=i;j1=j;}

m=0;

for(i2=0;i2<k;i2++)

if(*(*(p+i1)+j1)>=*(*(p+i2)+j1) && i1!=i2)

m=1; if(!m){printf("\nNaidena sedlovays tochka %d c koordinatami: %d-stroka,%d-stolbec",*(*(p+i1)+j1),i1+1,j1+1);

break;}}

}

Вставить одну строку в N-ую позицию второй строки

main()

{

char *a, *b;

int n, m, k, i;

printf("Enter n, m: ");

scanf("%d%d", &n, &m);

a = (char*) calloc(n+m+1, sizeof(char));

if (a==NULL)

{

printf("Not allocated!");

return 1;

}

b = (char*) calloc(m+1, sizeof(char));

if (b==NULL)

{

printf("Not allocated!");

return 1;

}

fflush(stdin);

gets(a);

gets(b);

printf("Enter position: ");

scanf("%d", &k);

for (i=n-1; i>=k; --i)

a[m+i]=a[i];

for (i=0; i<m; ++i)

a[k+i]=b[i];

printf("Result: \n");

puts(a);

}

2 строки. Вставить первую строку во вторую с фунциями

char *str_cat(char*,char*,int);

int get_str(char*,int);

int str_len(char*);

void main ()

{char *st,*ss,*tmp="";

int i,j,k,n;

scanf("%d",&n);//razmernost' 1-oi stroki

if(!(st=(char*)calloc(n,sizeof(char))))

{puts("Malo pamyati!");return;}

scanf("%d",&k);//razmernost' 2-oi stroki

//выделение памяти

get_str(st,n);//kuda budem vstavlyat'

get_str(ss,k);//kotoruyu nado vstavit'

scanf("%d",&j);//index, s kotorogo nado vstavit'

tmp=str_cat(st,ss,j);free(st);

st=tmp;puts(st);}

int get_str(char *st,int n)

{int c,i=0;

while(--n>0 && (c=getchar())!='\n' && c!=13)

*(st+i++)=c;

*(st+i)='\0';return i-1;}

char *str_cat(char *s1,char *s2,int k)

{char *ss;int i;

if(k>str_len(s1)) k=str_len(s1);

ss=(char*)malloc(str_len(s1)+str_len(s2));

for(i=0;i<k;i++) *(ss+i)=*(s1+i);

for(i=0;*(s2+i);i++) *(ss+k+i)=*(s2+i);

for(i=0;*(ss+k+str_len(s2)+i-1)=*(s1+k+i);i++);

*(ss+k+str_len(s2)+i)='\0'; free(s1);

s1=ss; return s1;}

int str_len(char *s)

{for(int t=0;*(s+t);t++); return t;

}

В main задать k строк. Написать функцию с неопределенным кол-вом параметров, которая принимает k строк заданных в main и находит слово максимальной длины.

#define N 5

char* f(int n, ...);

main()

{

int m, i;

char *s[N],*w;

printf("Enter max length: ");

scanf("%d", &m);

for (i=0; i<N; ++i)

s[i] = (char *) calloc(m+1, sizeof(char));

fflush(stdin);

for (i=0; i<N; ++i)

{

printf("Enter %d-s string: ", i);

gets(s[i]);

}

w=f(N, s[0], s[1], s[2], s[3], s[4]);

printf("%s\n", w);

w=f(3, s[0], s[1], s[2]);

printf("%s\n", w);

}

char* f(int n, ...)

{

char **s;

int i, j, begin, end, curlen, maxlen;

int maxi, maxj, slen, st;

char *w;

s=(char**)(...);

maxlen=0;

for (i=0; i<n; i++)

{ st=0;

slen=strlen(s[i]);

for (j=0; j<=slen; j++)

{ if ((st==0) &&

( (s[i][j]>='a') && (s[i][j]<='z') ||

(s[i][j]>='Z') && (s[i][j]<='Z')

) )

{ begin = j;

st=1;

}

else

if ((st==1) &&

!((s[i][j]>='a') && (s[i][j]<='z') ||

(s[i][j]>='Z') && (s[i][j]<='Z')

))

{end=j;

st=0;

curlen=end-begin;

if (curlen > maxlen)

{ maxlen=curlen;

maxi=i;

maxj=begin;

} } } }

w=(char *) calloc(maxlen+1, sizeof(char));

for (i=0; i<maxlen; ++i)

w[i] = s[maxi][maxj+i];

return w;

}

Поменять 1 и 2 местами

main ()

{int i,i1,i2,j1,j2;

char s[20],c;

gets(s);

for(i=0;i<20;i++)

if(!i || ((s[i-1]==' ')&&(s[i]!=' ')))

{i1=i;

while(s[i]!=' ') i++;

i2=i;

break; }

for(i;i<20;i++)

if(!i || ((s[i-1]==' ')&&(s[i]!=' ')))

{j1=i;

while(s[i]!=' ') i++;

j2=i;

break; }

for(i=i1;i<(i1+j2)/2;i++)

{c=s[i];

s[i]=s[i+j1];

s[i+j1]=c; }

printf("%s\n",s);

getch ();

return 0;

}

Поменять 1 и последнее

void main ()

{char *st,*st1;

int t=0,num1=0,num2=0,n,k=0;

int beg1=0,end2=0,i=0,i1=0;

int j=0,j1=0;

//razmernost' stroki

scanf("%d",&n);

st=(char*)calloc(n,sizeof(char));

//Vvedite text:");

k=get_str(st,n);

while (*(st+j)==' ')//propusk probelov

j++;

if(*(st+j)!=' ' && *(st+j)) beg1=j;

while(*(st+j)!=' ' && *(st+j))

{num1++;//schitaem kol-vo bukv v pervom slove

j++; if(*(st+j)==' ') break;}

i=k;//stavim index v konec stroki

while(*(st+i)==' ' && i!=0) //propusk probelov

i--;if(*(st+i)!=' ' && i!=0) //zapominaem konec slova

end2=i;

while(*(st+i)!=' ' && i!=0) //prohod po poslednemu slovu

{num2++;//schitaem kol-vo bukv v posled slove

i--; if(*(st+i)==' ') break;}

st1=(char*)calloc(k+1,1);//sozdaem novuyu stroku

i1=0; i=0; j=0;

while(*(st+t))

{while(i!=beg1 && *(st+i)) //perezapis' stroki do pervogo slova

{*(st1+i1)=*(st+i); i++;

i1++; t++; }

if(i==beg1)//esli doshli do pervogo slova

j=end2-num2+1;//stanovimsya v nachalo poslednego slova

while(j<end2+1) //poka ne do konca stroki

{

*(st1+i1)=*(st+j); j++;

i1++; t++;

}

if(j==end2+1)//esli konec stroki

i=beg1+num1;

while(*(st+i) && i!=end2-num2+1) //do nachala poslednego slova

{

*(st1+i1)=*(st+i); //perepisyvaem stroku

i++; i1++; t++;

}

if(i==end2-num2+1) //esli nachalo vtorogo slova

j=beg1;//ot nachala pervogo slova

while(*(st+j)!=' ' && *(st+j))

{

*(st1+i1)=*(st+j); j++;

i1++; t++;

}

if(*(st+j)!=' ') { i=end2+1;

while(i<k+1) //dozapis' stroki

{*(st1+i1)=*(st+i);

i++; i1++; t++; } }

*(st1+i1)='\0'; }

free(st);

st=st1;

puts(st); }

int get_str(char *st,int n)

{int c,i=0;

while(--n>0 && (c=getchar())!='\n' && c!=13)

*(st+i++)=c;

*(st+i)='\0'; return i-1;

}

Удаление символа

void swap(char*);//funkcia zameny elementov

void del(char**,char);

void main()

{char **st,simv;

int i,j,k,n,t;

//количество строк

scanf("%d",&n);

st=(char**)calloc(n,sizeof(char*));

//количество символов

scanf("%d",&t);

for(i=0;i<t;i++)

*(st+i)=(char*)calloc(t,sizeof(char));

for(i=0;i<n;i++)

gets(*(st+i));

//символ для поиска

scanf("%c",&simv);

for(i=0;i<n;i++)

del(st+i,simv);

for(i=0;i<n;i++)

puts(*(st+i));

getch();}

void del(char *(*(st+i)),char simv)

{static j;

if(*(*(st+i)+j)==simv)

{if(*(*(st+i)+j+1))

swap(*(st+i)+j);}

else j++;

if(*(*(st+i)+j)) del(st+i,simv);}

void swap(char *pp)

{*pp=*(pp+1);

if(*pp) swap(pp+1);

}

Ввести несколько чисел. Вывести в обратн. порядке

void func();

int k;

void main()

{//количество чисел

scanf("%d",&k);

//ввод чисел

func();}

void func()

{static i; int j;

scanf("%d",&j);

i++;

if(i<k) func();

printf("\n%d:%d",i--,j);

}

Рекурсивный переворот строки наместе

void rev1(char *ss,int nn)

{ static i;

char c;

c=*(ss+i++);

if(c) rev1(ss,nn);

else return;

*(ss+nn- (--i)=c;

}

void rev2(char *ss,int nn)

{ static i;

char c;

c=*(ss+i++);

*(ss+i)=*(ss+nn-1-i)

*(ss+nn-1-i)=c;

if(++i < nn/2) rev2(ss,nn);

else return;

}

Реверс первого слова

void main()

{char *s,c;

int n;

s=(char*)malloc(100*sizeof(char));

gets(s);

n=0;

while (*(s+n)!=' ' && *(s+n)) n++;

n--;

for(int i=0;i<(n+1)/2;i++)

{c=*(s+i);

*(s+i)=*(s+n-i);

*(s+n-i)=c;}

puts(s);

}

Реверс главной диагонали

void revers(int k,int** mt)

{static i,j=k-1;

int tmp=*(*(mt+i)+i);

*(*(mt+i)+i)=*(*(mt+j)+j);

*(*(mt+j)+j)=tmp;

i++;j--;

if(i<j) revers(k,mt);

i--;j++;

}

Реверс слов в массиве строк

#define n 3

void revs(char* m)

{int l;

static int i,k;

char *s;

l=0;

while(m[i]!=' '&&m[i]!='\0')

{ l++;

i++;}

s=(char*)malloc(l*sizeof(char));

for(k=0;k<l;k++) s[k]=m[i-l+k];

if(m[i])

{ i++;

revs(m);

m[i++]=' ';

for(k=0;k<l;k++,i++) m[i]=s[k];

m[i]='\0';}

else

{ i=0;

for(k=0;k<l;k++,i++) m[i]=s[k];

m[i]='\0';}}

void revb(char* m)

{static int i,j;

char c;

c=m[i++];

if(c)

{ revb(m);}

else

{i=0;

j=0;

return;}

m[j++]=c;

return;}

main()

{int i,f;

char m[100];

clrscr();

for (f=0;f<=n;f++)

{gets(m);

i=0;

while(m[i]) i++;

revb(m);

puts(m);}

getch();

return 0;}

Ввести массив строк и рекурсивно сделать реверс строки

void f(char*, int, int);

main()

{

char **s;

int n, m;

int i;

//ввести

//выделить память

for (i=0; i<n; ++i)

{ printf("Enter str #%d: ", i+1);

gets(s[i]); }

for (i=0; i<n; ++i)

{ f(s[i], strlen(s[i]), 0); }

printf("Result: \n");

for (i=0; i<n; ++i)

{ puts(s[i]); }

}

void f(char* s, int n, int i)

{ char tmp;

if (i<n/2)

{ tmp = s[i];

s[i] = s[n-i-1];

s[n-i-1] = tmp;

f(s, n, i+1);

}

}

2 матрицы умножить (while)

#define N1 3

#define N2 3

#define N3 3

int m[N1][N2];

int n[N1][N2];

int mn[N1][N3];

main ()

{ int i,j,k;

clrscr ();

for (i=0; i<N1; i++)

for (j=0; j<N2; j++)

scanf ("%d",&m[i][j]);

for (i=0; i<N2; i++)

for (j=0; j<N3; j++)

scanf("%d",&n[i][j]);

i=0;

while (i<N1)

{ j=0;

while (j<N3)

{mn[i][j]=0;

k=0;

while (k<N2)

{mn[i][j]+=m[i][k]*n[j][k]; k++; }

j++;}

i++; }

for (i=0; i<N1; i++)

{printf ("\n");

for (j=0; j<N3; j++)

printf ("%d ",mn[i][j]); }

getch ();

return 0;

}

Перемножить 2 матрицы циклами do...while

void main()

{

int *m1,*m2,*m3,m,n,k,i,j,i1,i2,i3,j1,j2,j3;

scanf("%d%d%d",&m,&n,&k);

m1=(int*)malloc(m*n*sizeof(int));

m2=(int*)malloc(n*k*sizeof(int));

m3=(int*)calloc(m*k,sizeof(int));

for(i=0;i<m*n;i++)

scanf("%d",m1+i);

for(i=0;i<n*k;i++)

scanf("%d",m2+i);

i2=i3=j2=j3=0;

for(i1=0;i1<m;i1++)

{do

{j1=0;

do

{*(m3+i3*k+j3)+=*(m1+i1*n+j1)**(m2+i2*k+j2);

i2++;

j1++;

}while((i2<n) && (j1<n));

j3++;

j2++;

i2=0;

}while(j2<k && j3<k);

j3=0;

i3++;

i2=0;

j2=0;

}

}

Функция перемножения двух матриц циклами do...while

void mul(int **a, int **b, int **&c, int n, int m, int k);

void input(int **&a, int &n, int &m);

void output(int **a, int n, int m);

void alloc(int **&a, int n, int m);

main()

{

int **a1, **a2, **a3, n1, m1, n2, m2;

printf(" Matrix 1: \n");

input(a1, n1, m1);

printf(" Matrix 2: \n");

input(a2, n2, m2);

alloc(a3, n1, m2);

mul(a1, a2, a3, n1, m1, m2);

printf(" Result: \n");

output(a3, n1, m2);

}

void mul(int **a, int **b, int **&c, int n, int m, int k)

{ int i, j, l;

i=0;

do

{

j=0;

do

{

c[i][j]=0;

l=0;

do

{ c[i][j] += a[i][l]*b[l][j];

++l;

}

while (l<m);

++j;

}

while (j<k);

++i;

}

while (i<n);

}

void alloc(int **&a, int n, int m)

{ int i, j;

a=(int **) calloc(n, sizeof(int *));

for (i=0; i<n; ++i)

{ a[i]=(int*) calloc(m, sizeof(int));

}

}

void input(int **&a, int &n, int &m)

{ int i, j;

printf("Enter n, m: ");

scanf("%d%d", &n, &m);

alloc(a, n, m);

printf("Enter matrix: \n");

for (i=0; i<n; ++i)

{

for (j=0; j<m; ++j)

scanf("%d", &a[i][j]);

}

}

void output(int **a, int n, int m)

{ int i, j;

for (i=0; i<n; ++i)

{

for (j=0; j<m; ++j)

printf("%4d", a[i][j]);

}

}

НОД рекурсией

int NOD(int n, int m);

main()

{ int n, m;

int nod;

scanf("%d%d", &n, &m);

nod = NOD(n, m);

printf("%d \n", nod);

return 0;}

int NOD(int n, int m)

{ int t;

if (n<m)

{ t=n;

n=m;

m=t;}

/* n >= m */

if (n%m==0)

{return m;}

else

return NOD(n%m, m);

}

Фиббоначи рекурсией

int fin(int);

void main()

{int n,i;

scanf("%d",&n);

for(i=0;i<n;i++)

printf("\n%4d",fin(i));

}

int fin(int n)

{return !n || (n==1)?1:fin(n-1)+fin(n-2);

}

Ввести символьную строку, и для каждого числа найти числа Фиббоначчи рекурсией

int fin(int);

void main()

{int *m,n,i;

scanf("%d",&n);//razm. massiva

m=(int*)malloc(n*sizeof(int));

for(i=0;i<n;i++)

scanf("%d",m+i);

for(i=0;i<n;i++)

printf("\n%d",fin(*(m+i)));

}

int fin(int n)

{return (n==0 || n==1)?1:fin(n-1)+fin(n-2);

}

sinX

#include<stdio.h>

#include<conio.h>

#include<math.h>

int fact(int n);

void main()

{int n,i,ch=1,a,b,h,j;

double e,sum=0;

puts("Vvedite a,b,h, kolichestvo slagaemyx i tochnost':");

scanf("%d%d%d%d%lf",&a,&b,&h,&n,&e);

for(j=a;j<=b;j+=h)

{for(i=1;i<2*n && (pow(j,i)/fact(i))>e;i+=2)

if(ch%2!=0)

{sum+=pow(j,i)/fact(i);

ch++; }

else

{sum-=pow(j,i)/fact(i);

ch++;}

printf("\nSinX = %lf",sum);}}

int fact(int n)

{if(n==0 || n==1) return 1;

return fact(n-1)*n;

}

Нахождение логарифма

#include<stdio.h>

#include<conio.h>

#include<math.h>

int fact(int n);

void main()

{int n,i,ch=1;

double x,e,sum=0;

puts("Vvedite chislo, kolichestvo slagaemyx i tochnost':");

scanf("%lf%d%lf",&x,&n,&e);

for(i=1;i<=n && (pow(x-1,i)/i)>e;i++)

if(ch%2!=0)

{sum+=pow(x-1,i)/i;

ch++; }

else

{sum-=pow(x-1,i)/i;

ch++; }

printf("\nlnX = %lf",sum);}

Факториал (3 способа)

#include<stdio.h>

int fact1(int n);

int fact2(int n);

int fact3(int n);

void main()

{int n,f1,f2=0,f3=0;

puts("Enter n:");

scanf("%d",&n);

f1 = fact1(n);

f2 = fact2(n);

f3 = fact3(n);}

int fact1(int n)

{if(n==1) return 1;

else return fact1(n-1)*n;}

int fact2(int n)

{return n?n*fact2(n-1):1;}

int fact3(int n)

{static long i; // т.к. i-статическая, то для нее не созда-

if(!n) return 1;// ется копии и при возврате через return

// для вычисления 0!

if (++i<n)

return fact3(n)*--i;

return n; // i сохраняет const максимальное значение}

Посчитать за один проход кол-во цифр и букв

main()

{

char s[1024];

int cnt[256];

int i, n;

printf("Enter string: \n");

gets(s);

for (i=0; i<256; ++i)

cnt[i]=0;

for (i=0; s[i]!='\0'; ++i)

{

cnt[s[i]]++;

}

for (i=0; i<256; ++i)

{

if (cnt[i] > 0)

{

printf(" %c : %d time(s) \n", i, cnt[i]); }}

}

Найти в каждой строке слова состоящие из первых 5 букв и вывести их. Не использ. другие массивы

void main()

{char **st;clrscr();scanf("%d",&k);

st=(char**)calloc(k,sizeof(char*));

for(i=0;i<=k;i++){*(st+i)=(char*)calloc(200,sizeof(char));

gets(*(st+i));}for(i=1;i<=k;i++){while(*(*(st+i)+j)!='\0')

{while(*(*(st+i)+j)!='\0' && *(*(st+i)+j)!=' ')

{for(y=0;y<5;y++){if(*(*(st+i)+j)=='a'+y)

{j1=j;j1--;while(j1>=0 && *(*(st+i)+j1)!=' ')

{if(*(*(st+i)+j1)==*(*(st+i)+j)){s1++;j1--;}

else j1--;}if(s1==0){s++;break;}else s1=0;}}j++;}if(s==5)

{j-=5;s=0;while(*(*(st+i)+j)!='\0' && *(*(st+i)+j)!=' ')

{printf("%c",*(*(st+i)+j));j++;}} else s=0;

if(*(*(st+i)+j)!='\0')j++;}}getch();

}

Сортирока слов через коммандную строку

void main(int argc,char** argv)

{int i,j,k,z;

char *c;

clrscr();

for(i=1;i<argc-1;i++)

for(j=1;j<argc-i;j++)

{ k=0;

while(!(z=*(*(argv+j)+k)-*(*(argv+j+1)+k))) k++;

if(z>0)

{ c=*(argv+j);

*(argv+j)=*(argv+j+1);

*(argv+j+1)=c;} }

for(i=1;i<argc;i++) puts(*(argv+i));

return;

}

Массив строк содерж по алф.

int str_cmp(char*,char*);

void copy(char*,char*);

void sort(int size,char str[][80])

{int i,j;char tmp[80];

for(i=0;i<size-1;i++)

for(j=i+1;j<size;j++)

if(str_cmp(str[i],str[j])>0)

{copy(tmp,str[i]);

copy(str[i],str[j]);

copy(str[j],tmp);}}

void copy(char *s1,char*s2)

{while(*s1++=*s2++);}

int str_cmp(char *s1,char *s2)

{while(*s1 || *s2)

if(*s1-*s2) return *s1-*s2;

else {s1++;s2++;}}

void main()

{char arr[10][80];

int num,i;

do{printf("Vvedite kol-vo strok:\n");

scanf("%d",&num);}while(num>10);

for(i=0;i<num;i++)

gets(arr[i]);//vvod}

sort(num,arr);

printf("\nOtsortirovannye stroki:\n");

for(i=0;i<num;i++) puts(arr[i]);

}

Отсортировать главную диагональ (указатель на указатель)

void sort(int k,int** mt)

{int i,j;

for(i=0;i<k;i++)

for(j=k-1;j>i;j--)

if(*(*(mt+i)+i)>*(*(mt+j)+j))

{int tmp=*(*(mt+i)+i);

*(*(mt+i)+i)=*(*(mt+j)+j);

*(*(mt+j)+j)=tmp;}}

void main()

{int **p,i,j,k;

printf("\nRazmernost' stroki i stolbca:");

scanf("%d",&k);

if (!(p=(int**)malloc(k*sizeof(int*))))

{puts("Malo pamyati!");return;}

for (i=0;i<k;i++)

if (!(*(p+i)=(int*)malloc(k*sizeof(int))))

{puts("Malo pamyati!");for (j=0;j<i;j++)

free (*(p+j));free (p);return;}

//vvod matricy

for (i=0;i<k;i++)

for (j=0;j<k;j++)

{printf("mt[%d][%d]=",i,j);

scanf("%d",(*(p+i)+j));}

/*Vyvod matricy do sortirovki*/

for (i=0;i<k;i++){printf("\n");

for (j=0;j<k;j++)

printf("%5d",*(*(p+i)+j));}

sort(k,p);

/*Vyvod matricy s otsortirovannym*/

}

Создать ф-цию с переменным числом параметров, в которую передаются k массивов типа float, затем найти тот массив, в котором сумма элементов максимальна вывести его

#define K 5

int f(int n, int m, ...);

main()

{

float **a;

int m;

int i, j;

float b[K][100];

printf("Enter size of arrays: ");

scanf("%d", &m);

a=(float**) calloc(K, sizeof(float*));

if (!a)

{ return 1;

}

for (i=0; i<K; ++i)

{ a[i] = (float*) calloc(m, sizeof(float));

if (a[i]==NULL)

{ printf("Could not allocate memory!");

return 1;

}

}

for (i=0; i<K; ++i)

for (j=0; j<m; ++j)

{ scanf("%f", &b[i][j]);

}

i=f(K, m, b[0], b[1], b[2], b[3], b[4]);

for (j=0; j<m; ++j)

printf("%5.3f ", b[i][j]);

printf("\n");

}

int f(int n, int m, ...)

{ int i, j;

float **a;

float s, maxs;

int maxi;

a=(float**)(...);

maxs=0;

for (i=0; i<n; ++i)

{ s=0;

for (j=0; j<m; ++j)

s+=a[i][j];

if (s>maxs)

{ maxi=i;

maxs=s;

} }

return maxi;

}

A to I

atoi (char *ss)

{

int n,i=0, znak;

while (ss[i]==’ ‘) i++;

if (!ss[i]) return 0;

znak (ss[i]==’-‘)? –1:1;

if (ss[i]==’+’ || ss[i]==’-’) i++;

for (n=0;ss[i]>’0’ && ss[i]<=9; i++)

n=10*n+(ss[i]-‘0’);

return znak *n;

}

I to A

void itoa(int);

void main()

{int n;

scanf("%d",&n);

itoa(n);}

void itoa(int n)

{int i=0;

char *st,znak;

n>0?znak='+':znak='-';

znak=='-'?n=-n:n;

st=(char*)calloc(100,sizeof(char));

do

*(st+i++)=n%10+'0';

while ((n/=10)>0);

*(st+i)=znak;

for(int j=i;j>=0;j--)

printf("%c",*(st+j));}

A to F

double atof(char *s)

{ double n, ii=0;

int i=0, znak;

while (ss[i]==’ ‘) i++;

if (!ss[i]) return 0;

znak=(ss[i]==’-‘)?-1:1;

if(ss[i]=’-‘ || ss[i]==’+’) i++;

for (n=0.0; (ss[i]=’0’ && ss[i]<=’s’) ||

ss[i]==’.’; i++)

{ if (ss[i]=’.’)

n=10.* n+(ss[i]-‘0’);

else ii=1;

if (ii) ii*=10;

} ii/=10;

return znak *n/ii;

}

Посчитать сумму неизвестного числа Int и Float переменных. Использовать va_list, va_start

#include <stdio.h>

#include <stdlib.h>

#include <stdarg.h>

enum Type

{ End,

Float,

Int};

float f(...);

main()

{ float sum;

sum = f(Int, 5, Float, 7.3, Int, 2, End);

printf("%5.3f\n", sum);

return 0;}

float f(...)

{ float sum=0;

Type type;

int int_var;

float float_var;

va_list a;

va_start(a, 0);

while ( (type = va_arg(a, Type) ) != End)

{if (type==Int)

{ int_var = va_arg(a, int);

sum+=(float) int_var;}

else if (type==Float)

{ float_var = va_arg(a, double);

sum+=(float)float_var;}}

va_end(a);

return sum;

}

Нахождение интеграла методом трапеции

double fun(double);

double trap(double(*)(double),double,double,double,double);

void main()

{double(*f)(double),a,b,e,n;

scanf("%lf%lf%lf%lf",&a,&b,&e,&n);

f=fun;

printf("Integral=%lf",trap(f,a,b,e,n));}

double trap(double(*f)(double),double a,double b,double e,double n)

{double y1,y2=0,x,h;

h=(b-a)/n;

do

{y1=y2;

y2=0.5*((*f)(b)+(*f)(a));

for(x=a+h;x<=b-h;x+=h)

y2+=(*f)(x);

y2*=h;

h/=2;}

while(fabs(y1-y2)>e);

return y2;}

double fun(double x)

{return x-1;

}

Нахождение интеграла методом прямоуголн.

double fun(double);

double rect(double(*)(double),double,double,double,double);

void main()

{double (*f)(double);

double a,b,e,n;

scanf("%lf%lf%lf%lf",&a,&b,&e,&n);

f=fun;

printf("Koren=%lf",rect(f,a,b,e,n));}

double rect(double(*f)(double),double a,double b,double e,double n)

{double y1,y2=0,h=fabs(a-b)/n,x;

do

{y1=y2;

y2=f(a)*h;

for(x=a+h;x<b-h;x+=h)

y2+=f(x)*h;

h/=2;}

while(fabs(y1-y2)>e);

return y2;}

double fun(double x)

{return x-1;

}

Методом деления отрезка пополам найти корень уравнения

double f(double);

double luc(double a, double b, double e, double (*f)(double));

main()

{

double a, b, eps;

double res;

printf("Enter a, b, eps: ");

scanf("%lf%lf%lf", &a, &b, &eps);

res = luc(a, b, eps, &f);

printf("%lf\n", res);

}

double f(double x)

{

return x*x-4;

}

double luc(double a, double b, double e,

double (*f)(double))

{

double fa, fb, c, fc;

do

{

fa = (*f)(a);

fb = (*f)(b);

c = (a+b)/2;

fc = (*f)(c);

if (fa*fc < 0)

b=c;

else

if (fc*fb < 0)

a=c;

else

{

return c;

}

}

while (fabs(a-b)>e);

return c;

}

Методом хорд найти корень уравнения

int xord(double(*f)(double), double a, double b, double *x, double e)

{ double fa,fb,fx,x0=*x;

int n=0;

fa=f(a);

fb=f(b);

*x=a-fa*(b-a)/(fb-fa);

do

{ n++;

x0=*x;

fa=fx;

*x=a-fa*(b-a)/(fb-fa);

}

if(fx*fa<0)

{ b=*x;

fb=fx;

*x=b-fb*(b-a)/(fb-fa);;

}}

while(fabs(x0-*x)>e);

return n;

Сортировка Хора

#define n 3

void hoare(int l,int r,int *ms)

{int i=l,j=r;

int se=ms[(1+r)/2];

int buf;

do

{while(ms[i]<se) i++;

while(ms[j]>se) j--;

if (i<=j)

{buf=ms[i];

ms[i]=ms[j];

ms[j]=buf;

i++;j--;}}

while(i<=j);

if(i<r)

hoare(i,r,ms);

if(j>l)

hoare(l,j,ms);}

void main()

{int i,j,ms[n][n],s;

puts("Entar array:");

for(i=0;i<n;i++)

for(j=0;j<n;j++)

scanf("%d",&ms[i][j]);

puts("Enter str N:");

scanf("%d",&s);

puts("a");

hoare(0,n-1,ms+s);

}

Перевод строк в числа

void smax(char**,int);

void sorts(char**,int);

void revs(char*);

main()

{char *u,**s=0;

int i,j,k,z,n;

double *m,p;

clrscr();

{ printf("\n BBEDITE STROKI \n");

u=(char*)malloc(100*sizeof(char));

if(s)

{for(i=0;i<10;i++) if(*(s+i)) free(*(s+i));

free(s);}

s=(char**)calloc(10,sizeof(char*));

for(i=0;i<10;i++)

{gets(u);

if(*u=='\0')

{ n=i;

break;}

j=0;

while(*(u+j)!='\0') j++;

*(s+i)=(char*)malloc((j+1)*sizeof(char));

for(k=0;k<j+1;k++) *(*(s+i)+k)=*(u+k);

*(*(s+i)+k)='\0'; }

free(u); }

m=(double*)calloc(n,sizeof(double));

for(i=0;i<n;i++)

{ j=0;

if(*(*(s+i)+j)=='-')

{j++;

z=-1; }

else z=1;

while(*(*(s+i)+j)!='.'&&*(*(s+i)+j)!='\0')

{m[i]=(m[i]*10)+(*(*(s+i)+j)-'0');

j++; }

if(*(*(s+i)+j)=='.')

{j++;

p=1;

while(*(*(s+i)+j))

{ p/=10;

m[i]+=(*(*(s+i)+j)-'0')*p;

j++;}}

m[i]*=z;

printf("%lf\n",m[i]);}

getch();

}

Сортировать i-ую строку матрицы a[i][j] методом вставок

int* vstav(int len, int *mas)

{register int i, j, kk;

for(i=1;i<len;i++)

{j = i-1;

kk = mas[i];

while(j>=0 && kk<=mas[j])

mas[j-- +1]=mas[j];

mas[j+1]=kk;}

return mas;

}

void main()

{

int *mas,len=5;

mas=(int*)malloc(len*sizeof(int));

for(int i=0;i<len;i++)

scanf("%d",mas+i);

vstav(len,mas);

}

В main введите символьные строки, и напишите 3 функции: а) ввод символьной строки размером k б) нахождение длинны строки в) добавление одной строки в конец другой

char* inputstring(char*, int);

int stringlength(char*);

char* concat(char*, char*);

main()

{

char *s1, *s2;

int k1, k2, n1, n2;

printf("Enter k1, k2: ");

scanf("%d%d", &k1, &k2);

s1=(char*) calloc(k1+k2+1, sizeof(char));

s2=(char*) calloc(k2+1, sizeof(char));

printf("Enter 1st string: \n");

s1=inputstring(s1, k1);

printf("Enter 2nd string: \n");

s2=inputstring(s2, k2);

printf("Length of 1st string: %d\n", stringlength(s1));

printf("Length of 2st string: %d\n", stringlength(s2));

s1=concat(s1, s2);

printf("Concatenated: \n");

puts(s1);

printf("\n\n");

}

char* inputstring(char* s, int k)

{

int i=0;

char c;

do

{

c=getche();

if (c != '\r')

{

s[i]=c;

i++;

}

} while ((c!='\r') && (i<k));

s[i]='\0';

printf("\n");

return s;

}

int stringlength(char* s)

{

int i;

for (i=0; s[i]!='\0'; ++i)

;

return i;

}

char* concat(char* s1, char* s2)

{

int n1, n2, i;

n1=stringlength(s1);

n2=stringlength(s2);

for (i=0; i<n2; ++i)

s1[n1+i] = s2[i];

return s1;

}

Транспонировать .матрицу (while) без новой

#include <conio.h>

#include <stdio.h>

#define n 4

void trans(int m[n][n])

{ int i=0,j,t;

while (i<n)

{ j=0;

while(j<i)

{t=m[i][j];

m[i][j]=m[j][i];

m[j][i]=t;

j++; }

i++; }

}

main ()

{ int i,j,k,m[n][n];

for(i=0;i<n;i++)

for(j=0;j<n;j++)

scanf("%d",&m[i][j]);

for(i=0;i<n;i++,printf("\n"))

for(j=0;j<n;printf("%5d",m[i][j++]));

trans(m);

printf("\n\n");

for(i=0;i<n;i++,printf("\n"))

for(j=0;j<n;printf("%5d",m[i][j++]));

getch ();

return 0;

Сортировка кв. матрицы выше побочной диагонали

void main()

{ float *mm, k;

int i, i1, j, j1, n;

scanf(“%d”,&n);

mm=(float *)calloc(n*n, sizeof(float));

if(!mm) return;

//ввод mm

//вывод mm

for(i=0;i<n-2;i++)

for(j=0;j<n-i-1;j++)

{ k=*(mm+i*n+j);

for(i1=n-2;j1>=i;i1--)

for(j1=n-i1-2;j1>=0;j1--)

if((*mm+i*n+j)>*(mm+i1*n+j1))

{ k=*(mm+i*n+j);

*(mm+i*n+j)=*(mm+i1*n+j1);

*(mm+i1*n+j1)=k; }

}

Найти выше главной диагонали столбец с макс. суммой и ниже мин. суммой

int **p,n,s,i,j,i1,i2,s1,s1,k;

//ввод p

k=0;

s1=*(*p+1);

s2=*(*(p+n-1)+s-2);

j11;

j2=s-2;

for(j=0;j<n;j++)

{ for(i=0;i<n;i++)

if(i!=j)

k+=*(*(p+i)+j);

else

{ if(s1<k)

{ s1=k;

j1=j;

}

k=0;

}

if(s2>k && j<s-1)

{s2=k;

j2=j;

}

k=0;

}

Найти простые числа в кв. матрице и на его место поставить *. Остальные числа удалить и вывести * на экран

void main()

{ int **a,i,j,k=0,i1,i2,j1,j2,n,m;

//выделить память

i2=i1=n/2;

j2=j1=m/2;

do

{ if)j1<0 || j2>m-1)

break;

for (j=j1; j<=j2; j++)

*(*(a+i1)+j)=++k;

j2++;

if(i1<0 || i2>n-1)

break;

for(i=i1;i<=i2;i++)

*(*(a+i)+j2)=++k;

i2++;

if(j1<0 || j2>m-1)

break;

for(i=i2;j>=j1;j--)

*(*(a+i2)+j)=++k;

j1--;

if(i1<0 || i2>n-1)

break;

for(i=i2;i<=i1;j--)

*(*(a+i)+j1)=++k;

i1--:

} while(1);

for(i=0:i<n;i++)

for(j=0;j<m;j++)

{ k=0;

for(j1=2;j1<*(*(a+i)+j)-1;j1++)

if(*(*(a+i)+j)%j1==0)

k=1;

if(!k)

*(*(a+i)+j)=0;

}