Wczytywanie danych do tablicy dynamicznej

Problemy i ich rozwiązania w C++.
MatthewT
Nowicjusz
Posty: 1
Dołączył(a): sobota, 20 czerwca 2015, 16:57

Wczytywanie danych do tablicy dynamicznej

Post przez MatthewT »

Witam Serdecznie to mój pierwszy post więc witam wszystkich serdecznie.Mam mały problem przy programie.Prosiłbym o pomoc bo wydaje mi sie że czy dłużej patrze na ten kod tym mniej potrafie się skupić gdzie jest błąd...:/

Code: Zaznacz cały


#include<iostream>
#include <fstream>

using namespace std;


void quick_sort(int *tab, int lewy, int prawy)
{
  if(prawy <= lewy) return;

  int i = lewy - 1, j = prawy + 1,
  pivot = tab[(lewy+prawy)/2]; //wybieramy punkt odniesienia

  while(1)
  {
    //szukam elementu wiekszego lub rownego piwot stojacego
    //po prawej stronie wartosci pivot
    while(pivot>tab[++i]);

    //szukam elementu mniejszego lub rownego pivot stojacego
    //po lewej stronie wartosci pivot
    while(pivot<tab[--j]);

    //jesli liczniki sie nie minely to zamieñ elementy ze soba
    //stojace po niewlasciwej stronie elementu pivot
    if( i <= j)
      //funkcja swap zamienia wartosciami tab[i] z tab[j]
      swap(tab[i],tab[j]);
    else
      break;
  }

  if(j > lewy)
  quick_sort(tab, lewy, j);
  if(i < prawy)
  quick_sort(tab, i, prawy);
}


int main()
{
  int *tab, n, liczba,tmp = 0;

std::cout << "Wybierz sposob sortowania:\n";
std::cout << "1) Sortowanie poprzez wpisanie:\n";
std::cout << "2) Sortowanie z pliku:\n\n";
std::cin >> liczba;

switch( liczba )
    {
        case 1:

    cout << "Wybrales sposob nr 1\n";
    cout << "Prosze podac liczbe liczb do posortowania\n";
    cin>>n;
    tab = new int [n]; //przydzielenie pamiêci na elementy tablicy
    //wczytanie liczb
    cout << "Podaj liczby do posortowania \n";
    for(int i=0;i<n;i++)
      cin>>tab[i];

    quick_sort(tab,0, n-1);

cout << "\n\nWynik posortowania \n";

    for(int i=0;i<n;i++)
          cout<<tab[i]<<" ";

    cin.ignore();
    cin.get();


    break;

case 2:


cout << "Wybrales sposob nr 2\n";
cout << "UWAGA: Plik liczby.txt powinien znajdowac sie w \n";
cout << "tym samym folderze co progam\n";

  ifstream liczby("liczby.txt");

    if (!liczby)
    {
        cout << "Nie mozna otworzyc pliku";
        getchar();
        return 1;
    }

    while (!liczby.eof())
       liczby >> tab[tmp++];

    liczby.close();

n=tmp;

   quick_sort(tab,0, n-1);

cout << "\n\nWynik posortowania \n";

    for(int i=0;i<n;i++)
          cout<<tab[i]<<" ";

    cin.ignore();
    cin.get();

break;

    }
return 0;
}


Chodzi oto aby w 1 switchu pobrac i przesortowac i działe ale przy drugim nie chce mi pobrać danych do tablicy dynamicznej i tu cośjest nie tam ale nie wiem już jak to rozwiązać. Proszę o pomoc.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Wczytywanie danych do tablicy dynamicznej

Post przez Morfidon »

Jak ktoś wybierze przypadek 2 w switch'u to nie zostanie wywołana deklaracja dynamicznej alokacji pamięci z linii 56. Musisz zadeklarować odpowiednią ilość pamięci.

Nie zapomnij zwolnić zadeklarowaną pamięć słowem kluczowym delete.

Pozdrawiam :)
Post Reply