Informatika2-2015/Gyakorlat11

A MathWikiből
(Változatok közti eltérés)
 
12. sor: 12. sor:
 
* gyakorlatok
 
* gyakorlatok
 
* kivalasztasos_rendezes
 
* kivalasztasos_rendezes
 +
 +
== Feladat megoldások ==
 +
 +
=== kiegyenlit ===
 +
 +
<c>
 +
void kiegyenlit(int *a, int *b) {
 +
    if(*a >= *b + 2) {
 +
        --*a;
 +
        ++*b;
 +
    } else if(*b >= *a + 2) {
 +
        --*b;
 +
        ++*a;
 +
    }
 +
}
 +
</c>
 +
 +
=== hanyszor ===
 +
 +
A ciklusban mindig továbblépünk a szó előzőleg megtalált helyéről, mielőtt újra keressük a mondat hátralevő részében, hogy hol fordul elő legközelebb. Ezt addig tesszük amíg már nem fordul elő többször, akkor a ''pos'' értéke ''NULL'' lesz.
 +
 +
<c>
 +
int hanyszor(const char *szo, const char *mondat) {
 +
    const char* pos = strstr(mondat, szo);
 +
    int db = 0;
 +
    while(pos != NULL) {
 +
        pos += 1;
 +
        pos = strstr(pos, szo);
 +
        ++db;
 +
    }
 +
    return db;   
 +
}
 +
</c>
 +
 +
=== sorhossz ===
 +
 +
<c>
 +
#include <stdio.h>
 +
#include <string.h>
 +
 +
int main() {
 +
    char sor[32];
 +
   
 +
    fgets(sor, 32, stdin);
 +
   
 +
    printf("%d", strlen(sor));
 +
   
 +
    return 0;
 +
}
 +
</c>
 +
 +
=== gyakorlatok ===
 +
 +
<c>
 +
void kiegyenlit(int *a, int *b) {
 +
    if(*a < *b - 1) {
 +
        ++*a;
 +
        --*b;
 +
    } else if(*b < *a - 1) {
 +
        --*a;
 +
        ++*b;
 +
    }
 +
}
 +
 +
int main() {
 +
    int n, letszam[20];
 +
    int i, j;
 +
   
 +
    scanf("%d", &n);
 +
    for(i = 0; i < n; ++i) {
 +
        scanf("%d", &letszam[i]);
 +
    }
 +
   
 +
    for(i = 0; i < 5; ++i) {
 +
        int maxind = 0, minind = 0;
 +
        for(j = 1; j < n; ++j) {
 +
            if(letszam[j] > letszam[maxind]) {
 +
                maxind = j;
 +
            }
 +
            if(letszam[j] < letszam[minind]) {
 +
                minind = j;
 +
            }
 +
        }
 +
        kiegyenlit(&letszam[minind], &letszam[maxind]);
 +
    }
 +
   
 +
    for(i = 0; i < n; ++i) {
 +
        printf("%d ", letszam[i]);
 +
    }
 +
   
 +
    return 0;
 +
}
 +
</c>
 +
 +
=== kivalasztasos_rendezes ===
 +
 +
<c>
 +
void csere(int *a, int *b) {
 +
    int regi_a = *a;
 +
    *a = *b;
 +
    *b = regi_a;
 +
}
 +
 +
int main() {
 +
   
 +
    int n;
 +
    int tomb[20];
 +
    int i, j;
 +
   
 +
    scanf("%d", &n);
 +
    for(i = 0; i < n; ++i) {
 +
        scanf("%d", &tomb[i]);
 +
    }
 +
   
 +
    for(i = 0; i < n; ++i) {
 +
        int minind = i;
 +
        for(j = i; j < n; ++j) {
 +
            if(tomb[j] < tomb[minind]) {
 +
                minind = j;
 +
            }
 +
        }
 +
        csere(&tomb[minind], &tomb[i]);
 +
    }
 +
   
 +
    for(i = 0; i < n; ++i) {
 +
        printf("%d ", tomb[i]);
 +
    }
 +
   
 +
    return 0;
 +
}
 +
</c>
 +
 +
== Házi feladatok megoldása ==
 +
 +
=== krampusz ===
 +
 +
<c>
 +
void krampusz(int *a, int *b, int *c) {
 +
    if(*a > *b + *c) {
 +
        *a = 0;
 +
    } else if(*b > *a + *c) {
 +
        *b = 0;
 +
    } else if(*c > *b + *a) {
 +
        *c = 0;
 +
    }
 +
}
 +
</c>
 +
 +
=== alfonz ===
 +
 +
<c>
 +
int main() {
 +
    int n, a, b, c, i;
 +
   
 +
    scanf("%d", &n);
 +
    int sum = 0;
 +
    for(i = 0; i < n; ++i) {
 +
        scanf("%d%d%d", &a, &b, &c);
 +
        krampusz(&a, &b, &c);
 +
        sum += a;
 +
    }
 +
   
 +
    printf("%d", sum);
 +
   
 +
    return 0;
 +
}
 +
</c>

A lap jelenlegi, 2015. május 9., 22:19-kori változata

Tartalomjegyzék

11. gyakorlat - C mutatók

Ezen a gyakorlaton az előző heti előadás anyagát dolgozzuk fel.

Feladatok

Feladatok a CloudCoder-en megtalálhatóak. Ajánlott sorrend:

  • kiegyenlit
  • hanyszor
  • sorhossz
  • gyakorlatok
  • kivalasztasos_rendezes

Feladat megoldások

kiegyenlit

void kiegyenlit(int *a, int *b) {
    if(*a >= *b + 2) {
        --*a;
        ++*b;
    } else if(*b >= *a + 2) {
        --*b;
        ++*a;
    }
}

hanyszor

A ciklusban mindig továbblépünk a szó előzőleg megtalált helyéről, mielőtt újra keressük a mondat hátralevő részében, hogy hol fordul elő legközelebb. Ezt addig tesszük amíg már nem fordul elő többször, akkor a pos értéke NULL lesz.

int hanyszor(const char *szo, const char *mondat) {
    const char* pos = strstr(mondat, szo);
    int db = 0;
    while(pos != NULL) {
        pos += 1;
        pos = strstr(pos, szo);
        ++db;
    }
    return db;    
}

sorhossz

#include <stdio.h>
#include <string.h>
 
int main() {
    char sor[32];
 
    fgets(sor, 32, stdin);
 
    printf("%d", strlen(sor));
 
    return 0;
}

gyakorlatok

void kiegyenlit(int *a, int *b) {
    if(*a < *b - 1) {
        ++*a;
        --*b;
    } else if(*b < *a - 1) {
        --*a;
        ++*b;
    }
}
 
int main() {
    int n, letszam[20];
    int i, j;
 
    scanf("%d", &n);
    for(i = 0; i < n; ++i) {
        scanf("%d", &letszam[i]);
    }
 
    for(i = 0; i < 5; ++i) {
        int maxind = 0, minind = 0;
        for(j = 1; j < n; ++j) {
            if(letszam[j] > letszam[maxind]) {
                maxind = j;
            }
            if(letszam[j] < letszam[minind]) {
                minind = j;
            }
        }
        kiegyenlit(&letszam[minind], &letszam[maxind]);
    }
 
    for(i = 0; i < n; ++i) {
        printf("%d ", letszam[i]);
    }
 
    return 0;
}

kivalasztasos_rendezes

void csere(int *a, int *b) {
    int regi_a = *a;
    *a = *b;
    *b = regi_a;
}
 
int main() {
 
    int n;
    int tomb[20];
    int i, j;
 
    scanf("%d", &n);
    for(i = 0; i < n; ++i) {
        scanf("%d", &tomb[i]);
    }
 
    for(i = 0; i < n; ++i) {
        int minind = i;
        for(j = i; j < n; ++j) {
            if(tomb[j] < tomb[minind]) {
                minind = j;
            }
        }
        csere(&tomb[minind], &tomb[i]);
    }
 
    for(i = 0; i < n; ++i) {
        printf("%d ", tomb[i]);
    }
 
    return 0;
}

Házi feladatok megoldása

krampusz

void krampusz(int *a, int *b, int *c) {
    if(*a > *b + *c) {
        *a = 0;
    } else if(*b > *a + *c) {
        *b = 0;
    } else if(*c > *b + *a) {
        *c = 0;
    } 
}

alfonz

int main() {
    int n, a, b, c, i;
 
    scanf("%d", &n);
    int sum = 0;
    for(i = 0; i < n; ++i) {
        scanf("%d%d%d", &a, &b, &c);
        krampusz(&a, &b, &c);
        sum += a;
    }
 
    printf("%d", sum);
 
    return 0;
}
Személyes eszközök