home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 37 / Flop_Magazin_37_1995_05_Raster_cs_Side_A.atr / nervyst.c < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. /*¢verze 3.1 - zrusen tisk adresáre¢resení úlohy NERVY z çasopisu - vÿvoj¢programu byl zpracován od 12.12.1995 do 24.1.1996¢PURE C - ATARI MEGA STE¢*/¢#include <stdio.h>¢#include <ext.h>¢#include <string.h>¢¢#define HEADER  "\n\t***************    NERVY   *****************\n\n"¢#define OPENERR "Can't open '%s'!\n\n"¢¢void pauza(void);¢void edit(void);¢¢unsigned int mati[10][10];¢char cisla[200][2][11];¢FILE *mat,*cisl;¢¢/* çeká na stisk mezerníku - vyçistí buffer klávesnice */¢void pauza(void)¢ {¢  int a;¢   printf (" Malá pauza - stiskni mezerník\n");¢   while(1)¢   {¢       while(kbhit())¢          getch();¢       a=getch();¢         if(a==' '||a==' ')¢             return;¢       a=0;¢   }¢}¢/* -------------------------------------------------------------- */¢¢/*   MENU   */¢char menu(void)¢{ char c;¢printf("\n\tV - zadávání osobních çísel a vÿpoçet vÿsledku\n");¢printf("\n\tM - zápis matice\n");¢printf("\n\tR - zápis zadanÿch konstant\n");¢printf("\n\tN - vÿpis obsahu tabulky mescû\n");¢printf("\n\n\tQ - návrat\n");¢   while(kbhit())¢      getch();¢   c=getch();¢   return(c);¢}   ¢/* ............................................... */¢¢/* ------------       vlastní vÿpoçetní operace ---------- */¢void kalk(void)¢{ char a[400],b[11];¢ unsigned int i,y,d,f,f1,z;¢   while(kbhit())¢     getch();¢   printf("\n\tZadávání osobních çísel a vÿpoçet vÿsledku\n\t: ");¢   gets(a);¢   d=strlen(a);¢   if(d>10||d<9)¢   { printf("\n\t¢patná délka çísla\n");¢     return;¢   }¢   if(d==9)/* moæno napsat jako aritmetickou operaci*/¢      z=0;¢    else¢      z=1;¢¢   for(y=0,f1=0;y<100;y++)¢   {  f=0;¢      strcpy(b,&cisla[y][z][0]);¢¢    if(d==10)¢    { b[9] = '0';¢      b[10] = 0;¢    }¢¢   for(i=0;i<10;i++)¢   { ¢          if(a[i]==b[i])¢      { /*printf("\tSouhlasná çíslice  ");*/¢         break;¢      }¢      else¢        f=f+(mati[b[i]-'0'][i]);¢   }¢       if(i==10)¢     if(f1 < f)¢       {  f1 = f;¢      printf("\n\tCislo:%s\tSouçet: %u\n",b,f1);¢           }¢    if(d==10)¢    {¢   for(i=8;i>5;i--)¢          b[i+1] = b[i];¢   b[6] = '0';¢           f=0;¢   for(i=0;i<10;i++)¢   { ¢          if(a[i]==b[i])¢      { /*printf("\tSouhlasná çíslice  ");*/¢         break;¢      }¢      else¢        f=f+(mati[b[i]-'0'][i]);¢   }¢       if(i==10)¢     if(f1 < f)¢       {  f1 = f;¢      printf("\n\tCislo (nula na 7. pozici):%s\tSouçet: %u\n",b,f1);¢           }¢   for(i=6;i>0;i--)¢          b[i] = b[i-1];¢   b[0] = '0';¢           f=0;¢   for(i=0;i<10;i++)¢   { ¢          if(a[i]==b[i])¢      { /*printf("\tSouhlasná çíslice  ");*/¢         break;¢      }¢      else¢        f=f+(mati[b[i]-'0'][i]);¢   }¢       if(i==10)¢     if(f1 < f)¢       {  f1 = f;¢      printf("\n\tCislo (nula na 1. pozici):%s\tSouçet: %u\n",b,f1);¢           }¢        }¢    }¢¢    if(d==9)¢    { a[9] = '0';¢      a[10] = 0;¢    }¢¢   for(i=0,f=0;i<10;i++)¢   {  ¢     f=f+(mati[a[i]-'0'][i]);¢   }¢   printf("\n Zadáno: %s\tvÿsledek: %u\n",a,f);¢ ¢    if(d==9)¢    {¢   for(i=8;i>5;i--)¢          a[i+1] = a[i];¢   a[6] = '0';¢¢   for(i=0,f=0;i<10;i++)¢   {  ¢     f=f+(mati[a[i]-'0'][i]);¢   }¢   printf(" Zadáno (nula na 7. pozici): %s\tvÿsledek: %u\n",a,f);¢¢   for(i=6;i>0;i--)¢          a[i] = a[i-1];¢   a[0] = '0';¢¢   for(i=0,f=0;i<10;i++)¢   {  ¢     f=f+(mati[a[i]-'0'][i]);¢   }¢   printf(" Zadáno (nula na 1. pozici): %s\tvÿsledek: %u\n\n",a,f);¢ ¢     }¢ /*printf("\n%s\ts indexy:%s\tzadáno:%s\n",b,&cisla[y][z][0],a);*/¢pauza();¢return;¢}¢¢/*              vytvorení matice         */¢int matice(void)¢{   unsigned int x,y,a;¢printf("\n\tZápis matice mêscû\n");¢printf("\n   !!  POZOR  - pokraçování zniçí pûvodní soubor  !!\n");¢printf("\nStisk Y pro novÿ zápis (jinak návrat)\n");¢       while(kbhit())¢          getch();¢       a=getch();¢    if(!(a=='y'||a=='Y'))¢       return(0);¢    if (!(mat = fopen("MATICE.DAT","wb") ))¢        {¢            printf(OPENERR,"MATICE.DAT");¢pauza();¢            return(-1);¢        }¢printf("\n\tzadej matici po cislech (oddêlené <ENTER>)\n");¢    for(y=0;y<10;y++)¢      for(x=0;x<10;x++)¢      {  scanf("%u",&a);¢         mati[x][y]=a;¢      }¢¢  for(y=0;y<10;y++)¢    for(x=0;x<10;x++)¢    { a=mati[x][y];¢      fprintf(mat,"%u\n",a);¢    }¢  fclose(mat); ¢  return(1);¢}¢¢/*  --------  tvorba rodnÿch çísel ----------- */¢void zad_cisla(void)¢{¢  printf("\n\tPostup zadávání doplñkovÿch rodnÿch çísel z magazínu:\n");¢  printf("\n   Vezmi textovÿ editor v reæimu ASCII, opisuj rodná çísla, za\n");¢  printf("   kaædÿm stiskni <ENTER>!!\n");¢  printf("\n   Vznikne tak text, kterÿ bude mít 400 odstavcû. Nezapomeñ");¢  printf("\n   v prûbêhu práce ukládat záloæní kopie na hardisk jako"); ¢  printf("\n   prevenci pred vÿpadkem elektrické energie!\n");¢}¢/* .......................... */¢¢void oprav(void)¢{  unsigned int x,y,i;¢printf("\n\tVÿpis matice\n");¢  for(y=0;y<10;y++)¢  { for(x=0;x<10;x++)¢    {   i =  mati[x][y];¢            printf(" %u ",i);¢    }¢    printf("\n\n");¢   } ¢ pauza();¢}¢¢/*  -----------------    inicializace matice   -----------   */¢int int_mat(void)¢{  unsigned int x,y,length,b;¢¢  if ((mat = fopen("MATICE.DAT","rb")) == NULL)¢    {¢        printf(OPENERR,"MATICE.DAT");¢pauza();¢        return(-1);¢    }¢  fseek(mat,0L,SEEK_END);¢  length=ftell(mat);¢  printf ("\nDélka souboru matice : %u    ",length);¢  fseek(mat,0L,SEEK_SET);¢¢  for(y=0;y<10;y++)¢  { for(x=0;x<10;x++)¢    { if(fscanf(mat,"%u",&b) != 1)¢       {    printf ("\nDélka souboru : %u je krátká   ",length);¢            return(0);¢       }¢     mati[x][y]=b;¢/* printf("\ntisk obsahu matice: %u     %u\n",mati[x][y],b);*/¢    }¢   } ¢  fclose(mat); ¢  return(1);¢}¢/*.....................*/¢¢/*             inicializace rodnÿch çísel  - naçtení ze souboru */ ¢int int_rc(void)¢{¢  unsigned int i,y,length;¢  char b[11];¢printf("\n\tNaçítání souboru çísel\n");¢    if (!(cisl = fopen("CISLA.DAT","rb")))¢        {¢            printf(OPENERR,"CISLA.DAT");¢pauza();¢            return(-1);¢        }¢  fseek(cisl,0L,SEEK_END);¢  length=ftell(cisl);¢  printf ("\nDéka souboru matice : %u    ",length);¢  fseek(cisl,0L,SEEK_SET);¢¢  for(y=0;y<2;y++)¢    for(i=0;i<200;i++)¢      { if(fscanf(cisl,"%s",&b) != 1)¢       {    printf ("\nDélka souboru : %u je krátká   ",length);¢            return(0);¢       }¢           strcpy(&cisla[i][y][0],b);¢        }¢  fclose(cisl); ¢       printf("\n%s\tdruhÿ:%s\n",b,&cisla[i-1][y-1][0]);¢       printf("\n%s\tbez &:%s\n",b,cisla[i-1][y-1][0]);¢  return(1);¢}¢/* .......................... */¢¢/*  ----------------    hlavní çást programu  -----------------   */¢void edit(void)¢{   unsigned int mu;¢    int  a;¢¢printf("\nVolána funkce inicializace matice\n");¢a = int_mat();¢    if(a<1)¢       if(a == -1)¢          printf("\nDatovÿ soubor s maticí nenalezen!\n"); ¢    else¢          printf("\nDatovÿ soubor s maticí je nêjak krátkÿ!\n");¢¢printf("\nVolána funkce inicializace rodnÿch çísel\n");¢a = int_rc();¢    if(a<1)¢       if(a == -1)¢          printf("\nDatovÿ soubor s çísly nenalezen!\n"); ¢    else¢          printf("\nDatovÿ soubor s çísly je nêjak krátkÿ!\n");¢¢    do{¢switch(menu()) {¢ case 'v':¢ case 'V':¢       kalk();¢       break;¢ case 'm':¢ case 'M':¢       matice();¢       break;¢ case 'r':¢ case 'R':¢       zad_cisla();¢       break;¢ case 'n':¢ case 'N':¢       oprav();¢       break;¢ case 'q':¢ case 'Q':¢       mu='Q';¢   printf ("\nNávrat na zaçátek\n");¢       break;¢default:¢   printf ("\n¢patná volba - opakuj\n");¢       break;¢}¢    }while(mu!='Q');    ¢ return;  ¢}¢/* ------------------------------------------------------------ */¢¢void main(void)¢{ int a;¢ do {¢    printf(HEADER);¢    printf("\nVolána funkce edit\n");¢    edit();¢    printf("\nNávrat z funkce edit\n");¢    pauza();¢    while(kbhit())¢       getch();¢    printf("\nOpustêní programu - Q\n");¢    a=getch();¢    if(a=='Q')¢       a='q';¢ }while(a!='q');¢}¢¢