Ratkaisuja 3. laskuharjoituksiin

Tehtävä 1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int lajitteletaulukko (int taulu[], int koko)
{
   int i,j,apu;
   for (i=0; i  taulu[j])
               {         /* vaihda alkiot */
                 apu = taulu [i];
                 taulu[i] = taulu[j];
                 taulu[j] = apu;
                } 
  return 1;              
}               

int tulostataulukko(int taulu[], int koko)
{
    int i;
    printf("\n");
    for (i=0; i

Tehtävä 2

#include <stdio.h>
#include <ctype.h>



float prososuudet(int counts[], int size)
{
 int c;
 float total=0;
  while ((c=getchar())!= EOF)
  {
   if (islower(c))   /* on pieni kirjain */
       if (c-'a' < size) counts[c-'a']++;
   total++;
   }
   printf("%4.0f \n",total);
   return(total);
 } 
 
 
 int main(void) 
 {
  int i;
  float n;
  int pros[26], koko = 26;
  for (i=0; i0?100*pros[i]/n:0.0);
  printf("\n");
  return 0; 
    
  } 
  

/*Syötä tekstiä tai lue tiedostosta ( a.out < tiedosto )*/

Tehtävä 3

#include <stdio.h>

 int syt (int a, int b)
{
  printf("SYT(%d,%d) \n", a, b);
  if (a>0 && b>0)   /* tässä  a:n tulee olla > 0 */
      if (a%b == 0) 
           return b;
      else 
           return (syt (b, a%b));
  else
    if (a == 0) return a;
     else return 0;
  }
  
int main (void)
{
 int a,b;
 printf("Anna luvut, joiden suurinta yhteistä tekijää etsitään\n");
 scanf(" %d %d", &a,&b);
 printf (" Lukujen %d  ja % d SYT = %d\n", a, b, syt(a,b)); 
 return 0;
 }

Tehtävä 4

#include <stdio.h>
#define MAX 80

int palindromi (char merkit[])
{
 int i, j;
 for (i = 0; merkit[i] != '\0'; i++); /* find end of the string */
 j=i-1;
 i=0;
 while (i < j)
   {
    if (merkit[i] == ' ') 
        i++;
     
    if (merkit[j] == ' ')
       j--;
     
    if (merkit[i] ==  merkit[j]) 
        {
            i++;
            j--;
        }
     else  
        if (merkit[i] != ' ' && merkit [j] != ' ') 
           return 0;
     }
 return 1;
 }    
     
 
 int main (void)
 {
    char pali [MAX];
    char pali1[MAX]="innostunut   sonni";
    char pali2[MAX]= "  saippua  kauppias  ";
    char pali3[MAX]= " sinä   ja jänis ";
    char pali4[MAX] = "kukkelilakkuk";
    int i, c;
    printf("\n");
    printf("%s  %s palindromi\n", pali1, palindromi(pali1)?" on ": " ei ole ");
    printf("%s %s palindromi\n", pali2, palindromi(pali2)?" on ": " ei ole ");
    printf("%s %s palindromi\n", pali3, palindromi(pali3)?" on ": " ei ole ");
    printf("%s %s palindromi\n", pali4, palindromi(pali4)?" on ": " ei ole ");
    printf("Anna maks. %d merkin mittainen merkkijono, "
    "niin katsotaan onko se palindromi.\n", MAX);
    i=0;
    while((c= getchar()) != EOF && i< MAX)
        if (c!= '\n')
           pali[i++] = c;
        else
        {
          pali[i] = '\0';
          i=0;
          printf("%s  %s palindromi\n", pali, 
                 palindromi(pali)? " on ": " ei ole "); 
        }             
    return 0;
 }  

Tehtävä 5

#include <stdio.h>

#define MAX 80
int lengths[MAX];

int wordlength()   /* returns the length of the next word */
 {
   int i=1, c; 
   while ((c=getchar())!= ' ' && c!='\n'&& c!= EOF)
     i++; 
   return i;
  }
  
int readandcheckinput( )
 {
   int i,c;
   while ((c=getchar())!= EOF)
        if (c!= ' '&& c!= '\n')
            lengths[wordlength()]++;
        else if (c=='\n') lengths[0]++; /*peräkkäiset rivinvaihdot */
              
            
   /* EOF on päättänyt syötön*/
   for (i=0; i < MAX; i++)
       if (lengths[i])
           printf("pituus %4d:    %5d  kpl \n", i, lengths[i]); 
  return 0;
 } 
 
 int main(void)
 {
   int i;
   for (i=0; i < MAX; i++)
     lengths[i] =0;
     readandcheckinput();
    return 0;
  }               
            

Tehtävä 6

#include <stdlib.h>
#include <stddio.h>
#include <time.h>

#define KADENKOKO 40

int vaihda (int taulu[], int k, int l)
 {
  int apu;
   apu = taulu[k];
   taulu[k] = taulu[l];
   taulu[l] = apu;
   return 1;
  }   


int sekoita (int pakka[], int kortteja)
{
 int i, j;
 /*sekoitetaan pakka käymällä kaikki pakan alkiot läpi ja vaihtamalla alkio
 satunnaisen alkion kanssa*/
 for ( i = 0; i < kortteja; i++)
    {
      j= rand() % 52;
      vaihda (pakka, i, j);
    } 
 return 0;    
 }
 
int jaa( int pakka[], int kasi[], int kortteja, int n)
/* jakaa pakan päällimmäiset (=lopusta)  n korttia käteen */
/* palauttaa negatiivisen luvun (=puuttuvien korttien määrä)
, jos pakassa ei ole tarpeeksi kortteja */
{
  int i, j=0;
   
   if (kortteja >= n)
      for (i=1; i <= n; i++)
         kasi[j++] = pakka[kortteja-i];
   return (kortteja - n);  /* pakan kortteja  jäljellä  */
                           /* jos negatiivinen =  puuttuvia kortteja */
}
         
 
 /* tutkii satunnaisfunktion satunnaisuutta */
 int testaasatunnaisuus (int pakka[], int pakankoko)
 {
  int i, j;
  for (i=0; i<52; i++)
      pakka[i] =0;
  for (i=0; i<100000; i++)
    {
    j= rand()%pakankoko;
     pakka[j]++ ;
    }
  printf("Pakka:"); 
  for (i=0; i<52; i++)
     printf ("%6d ", pakka[i]);
  printf("\n");   
  return 0;
 }    
    
 int main(void)
 {
  int kasi[KADENKOKO],
      pakka[52];
  int i, kadenkoko = 5, pakankoko=52;
     srand(time(NULL));  /*satunnaislukujen siemenluku */
  
 /* testaasatunnaisuus(pakka, pakankoko);*/
 /*alusta pakka */
  
     for (i=0;i< 52;i++)
        pakka[i] = i;    /*järjestetty pakka */
  
  sekoita(pakka, pakankoko);
  
  /* tulostetaan sekoitettu pakka */ 
  printf("Sekoitetun pakan kortit: \n");
  for (i=0; i < pakankoko; i++) 
      printf ("%5d=%2d:  %3d, \n", pakka[i], pakka[i]/13, pakka[i]%13+1);      
  printf("\n"); 
    
  pakankoko = jaa(pakka, kasi, pakankoko, kadenkoko);
  
  /*tulostetaan käden kortit */
  printf("Käden kortit:\n");
  for (i=0; i < kadenkoko; i++) 
         printf ("%2d:%3d, ", kasi[i]/13, kasi[i]%13+1);  
  printf("\n");
  /* tulostetaan  pakka */ 
  printf("Pakan kortit:\n");
  for (i=0; i < pakankoko; i++) 
         printf ("%2d:%2d,  ", pakka[i]/13, pakka[i]%13+1);   
  printf("\n"); 
  pakankoko = jaa(pakka, kasi, pakankoko, kadenkoko);
  /* tulostetaan kaden kortit */
  printf("Käden kortit:\n");
  for (i=0; i < kadenkoko; i++) 
         printf ("%2d:%2d,  ", kasi[i]/13, kasi[i]%13+1);  
  printf("\n");
  /* tulostetaan  pakka */ 
  printf("Pakan kortit:\n");
  for (i=0; i < pakankoko; i++) 
         printf ("%2d:%2d, ", pakka[i]/13, pakka[i]%13+1);  
  printf("\n"); 
  
  pakankoko = jaa(pakka, kasi, pakankoko, kadenkoko);
  /* tulostetaan kaden kortit */
  printf("Käden kortit:\n");
  for (i=0; i < kadenkoko; i++) 
         printf ("%2d:%2d, ", kasi[i]/13, kasi[i]%13+1);  
  printf("\n"); 
 return 0;
 }  
      


Viimeisin muutos 15.10.1999, Liisa Marttinen