Zapis kolejnych danych do tablicy

0

Witam. Ten program pobiera jeden wynik i normalnie go zapisuje, przy pierwszym uzyciu wszystkie inne dane ladnie sie przesuwaja, natomiast przy dodawaniu nastepnych czasow - kolejne pozycje sa zapelniane zerami. Gdzie siedzi blad?

//Napisz program, który pozwoli gromadzić w uporządkowanej tablicy liczb
//informacje o najlepszych „czasach” uzyskiwanych przez sprintera podczas treningu.
//Do gromadzenia tych informacji wykorzystaj pseudo - dynamiczną tablicę
//o stałym rozmiarze 100 elementów wykorzystującą dodatkową
//zmienną pomocniczą zliczającą ilość wprowadzonych wyników.
//Nowy wynik powinien być wprowadzany do tablicy w taki sposób
//aby po jego wprowadzeniu zawartość tablicy była nadal uporządkowana malejąco.
#include<iostream>
#include<cstdio>
using namespace std;
void dodaj(int ilosc, double t[]);
void odczytaj(double t[], int ilosc);
int main()
{
	double czasy[100] = { 9.58, 9.95, 10.01, 10.04, 10.24, 10.44 };
	int wybor;
	static int ilosc = 6;
	for (int i = 0;; ++i)
	{
		cout << "---------------------MENU--------------------" << endl;
		cout << "-----------1.Dodaj nowy wynik----------------" << endl;
		cout << "-----------2.Pokaz tabele rekordow-----------" << endl;
		cout << "-----------3.Wylacz program------------------" << endl;
		cin >> wybor;
		switch (wybor)
		{
		case 1: dodaj(ilosc, czasy); ++ilosc; break;
		case 2: odczytaj(czasy, ilosc); break;
		case 3: exit(1); break;
		default: cerr << "W menu nie ma takiej opcji!" << endl;
		}
	}
	return 0;
}
void odczytaj(double t[], static int ilosc)
{
	for (int i = 0; i < ilosc; ++i)
	{
		cout << i+1 << ". " << t[i] << endl;
	}
}
void dodaj(static int ilosc, double t[])
{
	bool czy_dodano = false;
	double x;
	int miejsce;
	double kopia[100];
	cout << "Podaj nowy czas uzyskany w biegu na 100m: ";
	cin >> x;
	++ilosc;
	for (int j = 0; j < ilosc; ++j)
	{
		if (x < t[j])
		{
			miejsce = j; break;
		}
	}
	for (int i = 0; i < ilosc; ++i) 	kopia[i] = t[i];
	for (int i = miejsce + 1; i < ilosc - miejsce; ++i)
	{
		t[i] = kopia[i - 1];
	}
	t[miejsce] = x;
}
2
  1. Używaj debugera!
  2. static wewnątrz funkcji znaczy coś zupełnie innego niż poza nią. Ta twoja zmienna wcale static być nie powinna. Szczególnie nie jeśli chodzi o modyfikator argumentu funkcji.
2

Jak wyżej, plus:

for (int i = miejsce + 1; i < ilosc - miejsce; ++i)

zamień ilosc - miejsce na ilosc.

2

Jak wyżej, oraz int miejsce=ilosc;

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