• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Utworzenie dodatkowej tablicy

VPS Starter Arubacloud
0 głosów
158 wizyt
pytanie zadane 16 listopada 2017 w C i C++ przez antek782 Początkujący (490 p.)

Witam,

Napisałem program, w którym wprowadza się imię i nazwisko oraz oceny studenta, a później można wypisać te dane wszystkich określonych studentów. Niestety nie mogę sobie teraz poradzić z wprowadzeniem nowej tablicy "char* dane[MAX][2]" , która pozwoli na osobne wprowadzanie i przechowywanie imienia i nazwiska.

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

#define MAX 20 // maksymalna liczba studentow
#define LICZBA_ZADAN 6 // liczba ocenianych zadan
#define BUF_SIZE 256 // wielkosc bufora znakowego

char* dane[MAX]; // tablica przechowujaca imiona i nazwiska studentow (czyli wskazniki do tablic znakowych)
float oceny[MAX][LICZBA_ZADAN]; // tablica przechowujaca oceny

int indeks=0; // indeks pierwszej wolnej pozycji w dzienniku

// Funkcja dodajaca nowa osobe do dziennika
int dodaj(char* nowe_imie_nazwisko, float* nowe_oceny)
{
    char* kopia;
    int i;

    if(indeks<MAX-1) // sprawdzanie, czy jest jeszcze miejsce w tablicy
    {
        kopia=malloc((strlen(nowe_imie_nazwisko)+1)*sizeof(char)); // rezerwacja pamieci, adres zarezerwowanego obszaru wpisywany do wskaznika 'kopia'
        strcpy(kopia, nowe_imie_nazwisko); // kopiowanie ciagu znakowego 'nowe_imie_nazwisko' pod adres w 'kopia'
        dane[indeks]=kopia; // element dane[indeks] wskazuje teraz na to samo co 'kopia'

        for(i=0; i<LICZBA_ZADAN; i++)
            oceny[indeks][i]=nowe_oceny[i]; // przepisanie ocen

        return indeks++; // zwraca numer studenta
    }
    else
        return -1; // nie ma juz miejsca w tablicy

}

void wypisz_srednia()
{
    if(indeks==0)
    {
        printf("Brak danych!\n");
        return;
    }

    int i, j;
    float srednia=0;

    for(i=0; i<indeks; i++)
        for(j=0; j<LICZBA_ZADAN; j++)
        {
            srednia+=oceny[i][j];
        }
    srednia/=(indeks*LICZBA_ZADAN);

    printf("\nSrednia: %f\n\n", srednia);
}

// Funkcja wypisujaca oceny z zadan
void wypisz_oceny()
{
    if(indeks==0)
    {
        printf("Brak danych!\n");
        return;
    }

    int i, j;

    printf("\n");

    for(i=0; i<indeks; i++)
    {
        printf("%-30s ", dane[i]); // wypisanie imienia i nazwiska

        for(j=0;j<LICZBA_ZADAN; j++)
            printf("%1.1f ", oceny[i][j]); // wypisanie oceny

        printf("\n");
    }

    printf("\n");
}


// Funkcja zwalniajaca pamiec zaalokowana w 'dodaj'
void zwolnij()
{
    while(--indeks>=0)
        free(dane[indeks]); // zwalnianie pamieci zaalokowanej w funkcji dodaj

}


int main()
{
    char bufor[BUF_SIZE];
    float oceny[LICZBA_ZADAN];
    int i;

    int opcja, koniec=0;

    while(!koniec)
    {
        printf("[1] Wprowadzenie danych nowego studenta\n");
        printf("[2] Wypisanie ocen\n");
        printf("[3] Obliczenie sredniej\n");
        printf("[0] Zakonczenie programu\n");

        printf("Wybierz opcje: ");
        scanf("%d", &opcja);

        while(getchar()!='\n'); // czyszczenie bufora wejsciowego

        switch(opcja)
        {
            case 1:
                printf("Wprowadz imie i nazwisko studenta: ");

                gets(bufor); // wczytanie pojedynczej linii

                for(i=0; i<LICZBA_ZADAN; i++)
                {
                    printf("Ocena z zadania %d: ", i+1);
                    scanf("%f", &oceny[i]);
                }

                dodaj(bufor, oceny);
                break;

            case 2:
                wypisz_oceny();
                break;

            case 3:
                wypisz_srednia();
                break;

            case 0:
            default:
                koniec=1;
                break;
        }

    }

    zwolnij(); //zwolnienie pamiecie zaalokowanej podczas pracy programu

    return 0;
}

Proszę o pomoc

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 2,955 wizyt
pytanie zadane 18 listopada 2017 w C# przez Mesne191 Początkujący (460 p.)
+1 głos
2 odpowiedzi 494 wizyt
pytanie zadane 26 sierpnia 2020 w C# przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 17 lipca 2018 w Java przez Kabuuz Bywalec (2,820 p.)

92,845 zapytań

141,786 odpowiedzi

320,861 komentarzy

62,178 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...