Wczytanie zestawów danych

0

Witam!
Ostatnio dowiedziałem się, że muszę poprawić swój projekt. Zaczynam dopiero przygodę z programowaniem i ciężko jest mi cokolwiek poradzić.

#include <stdio.h>

int main() {
	int liczba_przejazdow = 0;
	float a;
	float b;
	
	int i;
	scanf("%i", &liczba_przejazdow);
	
	for (i = 0; i < liczba_przejazdow; i++) {
		scanf("%f", &a);
		scanf("%f", &b);
		printf("%f\n", 2*a*b/(a + b));
	}
	
	return 0;
}

Tu jest mój kod. Otóż potrzebuje dodać do niego wczytywanie ilości zestawów danych. W sensie, że na wejściu piszę najpierw ile mam podać danych a poźniej dopiero oblicza średnią. O ile wiem, muszę wczytać to z pliku. Jak mogę sobie z tym poradzić?

Z góry dziękuje.

0

Zamiast zmiennych a oraz B, zrób sobie zmienne suma oraz ilość. W pętli dodawaj liczby do zmiennej suma i zwiększaj ilość liczb o jeden.

Potem po prostu policz średnią, bo masz już sumę o ilość.

0

Ale wtedy nie będzie wczytywało z pliku

0

https://pl.wikibooks.org/wiki/C/Czytanie_i_pisanie_do_plików - coś na temat wczytywania danych z plików w C.
Nie wiem co dokładnie chcesz wczytywać z pliku, ale powiedzmy że na razie tylko zmienną ilosc_przejazdow

FILE* file;
if ((file = fopen("test.txt", "r")) == NULL)
{
    printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
    exit(1);
}

int liczba_przejazdow = 0;

fscanf(file, "%d", &liczba_przejazdow);
printf("%d", liczba_przejazdow);

Kod pokazuje jak można wczytwać jedną zmienną typu int do kodu z pliku, jakby w pliku były np dwie liczby do wczytania to aby je wczytać wystarczy dwa razy wywołać funkcję fscanf.

0
TomRiddle napisał(a):

Zamiast zmiennych a oraz B, zrób sobie zmienne suma oraz ilość. W pętli dodawaj liczby do zmiennej suma i zwiększaj ilość liczb o jeden.

Potem po prostu policz średnią, bo masz już sumę o ilość.

Nie bardzo rozumiem. Mógłbyś to opisać jakoś jaśniej? Dzięki~!

0

Ja to widziałem tak

int main(int argc, char **argv) {
    double suma = 0, ilosc = 0;

    ifstream myfile("file.txt"); // otwarcie pliku
    if (myfile.is_open()) {
        string line;
        while (getline(myfile, line)) { // pobieranie po kolei liczb w pętli
            double number = atof(line.c_str());  // zamiana stringa na liczbę
            suma += number; // to o czym mówiłem
            ilosc++;
        }
        myfile.close();
    } else {
        cout << "Unable to open file";
    }
    cout << "Srednia to " << suma / ilosc;

    return 0;
}
0

Opisz dokładniej o co chodzi, nie wiadomo czy to C czy C++ więc domyślnie dla początkujących wziąłem C.
Moja interpretacja problemu wygląda tak:

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

#define MAX 10

int main()
{
// deklaracja zmiennych:
    int liczba_przejazdow = 0;
    float a[MAX];
    float b[MAX];
    int i = 0;
// wczytanie z klawiatury ilosci zestawow danych:
    printf("Podaj ilosc przejazdow: ");
    scanf("%i", &liczba_przejazdow);
// otwarcie pliku:
    FILE* file;
    if ((file = fopen("test.txt", "r")) == NULL)
    {
        printf ("Nie moge otworzyc pliku test.txt do zapisu!\n");
        exit(1);
    }
// wczytanie zstawów danych z pliku:
    for (i = 0; i < liczba_przejazdow; i++)
    {
        fscanf(file, "%f", &a[i]);
        fscanf(file, "%f", &b[i]);
    }
// zamkniecie pliku:
    fclose(file);
// jakieś obliczenia:
    for (i = 0; i < liczba_przejazdow; i++)
    {
        printf("%f\n", 2*a[i]*b[i]/(a[i] + b[i]));
    }

    return 0;
}

Oczywiście musisz mieć plik test.txt a w nim dane ułożone np tak:
(pierwsza liczba to a, druga to b - poza tym co oznacza a i b?)
3.14 2
2.1 14
czyli masz tu dwa zestawy danych, ale musisz zapewnić żeby użytkownik nie podał większej ilości zestawów do wczytania niż jest w pliku, można zwiększyć ilość zestawów w pliku albo ograniczyć maksymalną liczbę danych do wczytania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1