Na,akkor berakom egy kis kommenttel:) a hetedik feladatig kész
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#define M 20
/*------------------------------------------------------------------------------
Létre hozunk egy recordot ... ez elsõként a felhasználó nevét fogja tárolni,
mellé a hozzá tartozó teszt megoldásokat, valamint a legutolsó elem a jó
megoldások számát tárolja el. A recorddal egy tömböt hozunk létre. Ez arra, hogy
különbözõ típusú (string, integer) változókat tudjunk egy tömbben tárolni. A
létrehozott tömbönk a fent definiált M (20) elemû lesz.
------------------------------------------------------------------------------*/
struct teszt{
char nev[30];
int a[16];
} t[M];
int megoldas[15]; // eltárolom a megoldásokat
void elsofeladat();
void masodikfeladat();
void harmadikfeladat();
void negyedikfeladat();
void otodikfeladat();
void hatodikfeladat();
void hetedikfeladat();
void main()
{
randomize();
elsofeladat();
masodikfeladat();
harmadikfeladat();
negyedikfeladat();
otodikfeladat();
hatodikfeladat();
hetedikfeladat();
getch();
}
/*------------------------------------------------------------------------------
Lusták vagyunk, ezért soron kívül legeneráljuk a megoldas.txt és az adat.txt
fájlokat. Mivel ezt csak egyszer kell használni a továbbiakban kikommentelem :)
------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------
void general()
{
int i , j;
FILE *f , *m;
m=fopen("megoldas.txt","w+");
for (i = 0; i <= 14; i++) {
fprintf(f,"%d ", random(4)+1);
}
fclose(m);
f=fopen("adat.txt","w+");
for (j = 0; j <= M-1; j++) {
for (i = 0; i <= 14; i++) {
fprintf(f,"%d ", random(4)+1);
}
fprintf(f,"\n");
}
}
------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------
1. Kiiratni a képernyõre a tanulók válaszait.
------------------------------------------------------------------------------*/
void elsofeladat() {
int i , j , jo = 0;
char anev[30];
FILE *f , *m;
m=fopen("megoldas.txt", "rt");
for (i = 0; i <= 14; i++) {
fscanf(m,"%d", &megoldas[i]); // a megoldásokat beolvassuk a megoldas tömbbe.
}
fclose(m);
f=fopen("adat.txt", "rt");
for (i = 0; i <= M-1; i++) {
fscanf(f, "%s", &anev); // az anev változóba beolvasom a fájl elsõ stringjét
strcpy(t[i].nev, anev); // lemásolom ezt a stringet a rekordom elsõ elemébe
strcat(t[i].nev, " "); // a lemásolt adathoz hozzáfûzök egy szóközt
fscanf(f, "%s", &anev); // az anev változóba beolvasom a fájl második stringjét
strcat(t[i].nev, anev); // hozzáfûzöm ezt a stringet a rekordom elsõ eleméhez
for (j = 0; j <= 14; j++) { // egy másik ciklussal beolvasom a 15 teszt eredményét az a tömbbe.
fscanf(f,"%d", &t[i].a[j]); // beirom a beolvasott értéket az a tömbbe
if (t[i].a[j] == megoldas[j]) { // he ez a beolvasott érték megeegyezik a megoldás azonos feladatának értékével
jo++; // növelem a jo -t 1-gyel
}
}
t[i].a[15]=jo; // beirom az a tombbe a jo-t.
jo = 0; // jo-t lenullázom, hogy legközelebb is lehessen vele számolni
}
fclose(f);
// most ki fogom irni a fejlecet!
textcolor(8);
cprintf("Tanulo neve");
printf("\t");
for (j = 1; j <= 15; j++) { // ciklus segítségével a feladat sorszámáz
cprintf("%3d",j);
}
cprintf(" Jok"); // és végül, hogy jok, mert ott vannak a jó megoldások elmentve
printf("\n");
// fejlec vege, most jonnek az adatok
for (i = 0; i <= M-1; i++) {
printf("%s\t", t[i].nev); // kiírom a nevet.
for (j = 0; j <= 15; j++) {
printf("%3d", t[i].a[j]); //ciklus segítségével kiírom an évhez tartozó eredményeket
}
printf("\n"); // sort emelek, a többi tanulonak
}
}
/*------------------------------------------------------------------------------
2. Bekérni egy tanuló nevét és kiíratni csak az õ válaszait.
------------------------------------------------------------------------------*/
void masodikfeladat() {
int i = 0 , j , db = 0;
char anev[30];
char neve[30];
printf("\ntanulo neve: ");
gets(anev); // bekérem a tanuló nevét "aneve" változóba
strcpy(neve,anev); // átmásolom a szóköz miatt...
for (i = 0; i <= M-1; i++) {
if (strcmp(t[i].nev,neve)==0) { // összehasonlítom a bekértet a tárolt nevekkel .. ha egyezik:
printf("%s\t", t[i].nev); // kiírom a nevet.
for (j = 0; j <= 14; j++) {
printf("%3d", t[i].a[j]); //ciklus segítségével kiírom an évhez tartozó eredményeket
}
printf("\n"); // sort emelek, mert több tanulonak lehet ugyanaz a neve
db++; // novelem a db-t.
}
}
if (db==0) { // ha db=0, akkor nem volt a névnek megfelelõ tanuló
printf("Nincs ilyen nevu tanulo az iskolaban!");
}
printf("\n");
}
/*------------------------------------------------------------------------------
3. Kiírni h volt-e olyan tanuló, akinek mind a 15 válasza helyes.
------------------------------------------------------------------------------*/
void harmadikfeladat() {
int i = 0;
while (t[i].a[15]!=15 && i<=M-1) { // az eltarolt "jok" nem egyenlo 15-tel, akkor ciklusban marad, tehát növeli az i-t a megadott korláti
i++;
}
if (i<M) { // ha volt 15 jo, akkor i kisebb lesz M-nél, ezért kilép .. tehát csak ki kell írnunk:
printf("volt olyan tanulo, aki mindenre helyesen valaszolt.\n");
}
else {
printf("nem volt mindenre helyesen valaszolo tanulo.\n");
}
}
/*------------------------------------------------------------------------------
4. Kiíratni h volt-e olyan, akinek min 13 helyes válasza volt
szerintem félre írtad a feladatot ... szerintem az a feladat, hogy:
hányan válaszoltak legalább 13-ra helyesen :) szóval azt fogom megcsinálni ...
ha tévednék, akkor csak az elõzõben egy feltételt kell átírni:)
------------------------------------------------------------------------------*/
void negyedikfeladat() {
int i = 0 , db = 0;
for (i = 0; i <= M-1; i++) { // ciklussal végig megyek az eltárolt adatokon
if (t[i].a[16]>=13) { // ha a "jok" 13, vagy annal több, akkor
db++; // db-t novelem.
}
}
if (db==0) { // ha db = 0 akkor nem volt
printf("nem volt semennyi tanulo.\n");
}
else { // egyébként meg kiiratom db-t.
printf("%d tanulo irt 13, vagy annal tobb pontot ero teszetet.\n", db);
}
}
/*------------------------------------------------------------------------------
5. Bekérni a feladat sorszámát és kiíratni h kik válaszoltak rá helyesen.
------------------------------------------------------------------------------*/
void otodikfeladat() {
int i , j , ssz;
printf("\nfeladat sorszama: ");
scanf("%d",&ssz); // bekerem a feladat sorszamat
if (ssz<1 || ssz>15) {
printf("hibas szam\n");
}
else {
for (i = 0; i <= M-1; i++) {
if (megoldas[ssz-1]==t[i].a[ssz-1]) { //ciklusban osszehasonlitom a megoldasban tarolt és a tanulok altal adott valaszt
printf("%s\n", t[i].nev); // ha jó, kiírom a nevüket
}
}
}
}
/*------------------------------------------------------------------------------
6. Készíteni egy másik állományt amibe belekerülnek a tanulók neve és helyes válaszaik száma.
------------------------------------------------------------------------------*/
void hatodikfeladat() {
int i;
FILE *f;
f=fopen("helyesvalasz.txt","w+");
for (i = 0; i <= M-1; i++) {
fprintf(f,"%s: %d helyes valasz\n", t[i].nev , t[i].a[15] );
}
fclose(f);
}
/*------------------------------------------------------------------------------
7. Kiíratni a legrosszabb válaszadó(k nevét)
------------------------------------------------------------------------------*/
void hetedikfeladat() {
int i , min ;
min = t[0].a[15];
for (i = 0; i <= M-1; i++) {
if (min>t[i].a[15]) {
min = t[i].a[15];
}
}
printf("\nlegrosszabb valaszadok: \n");
for (i = 0; i <= M-1; i++) {
if (t[i].a[15] == min) {
printf("%s\n", t[i].nev);
}
}
}