Pole

#include <iostream>
#include "lexer.h"
 
/* Pole */
 
// template < class T >
class Pole
{
public:
    typedef double T;
    int cnt;
    T * data;
    Pole () : cnt (0), data (nullptr) { }
    Pole (int cnt0) : cnt (cnt0) { data = new T [cnt]; }
    void alloc (int n);
    ~Pole () { if (data != nullptr) delete [] data; }
    T& operator [ ] (int inx);
};
 
Pole::T & Pole::operator [ ] (int inx)
{
    if (inx < 0 || inx >= cnt) throw runtime_error ("Bad index");
    return data [inx];
}
 
void Pole::alloc (int n)
{
    if (data != nullptr) delete [] data;
    cnt = n;
    data = new T [cnt];
}
 
/* List */
 
struct Item;
 
struct List
{
    Item* first;
    Item* last;
    void insertLast (Pole::T val);
    List () : first (nullptr), last (nullptr) { }
};
 
struct Item
{
    Pole::T value;
    Item* next;
};
 
void List::insertLast (Pole::T val)
{
    Item* t = new Item;
    t->value = val;
    t->next = nullptr; 
 
    if (last != nullptr) // pokud seznam neni prazdny
        last->next = t; // pripojime novy prvek za posledni prvek
 
    last = t; // posledni bude novy prvek
 
    if (first == nullptr) // pokud byl seznam prazdny
        first = t; // prvni bude take novy prvek
}
 
/* cteni pole */
 
void readVec (Lexer& inp, Pole & pole)
{
    List list;
    inp.checkSeparator ('[');
    int k = 0;
    while (!inp.isSeparator (']'))
    {
        double num = inp.readNumber ();
        k++;
        list.insertLast (num);
 
        if (!inp.isSeparator (']'))
            inp.checkSeparator (',');
    }
    inp.checkSeparator (']');
 
    pole.alloc (k);
    int i;
    Item* p;
    for (i = 0, p = list.first ;  p != nullptr ; i++ , p = p->next)
    {
        pole.data [i] = p->value;
    }
}
 
 
int main()
{
    Pole a;
    Lexer inp ("abc.txt");
    readVec (inp, a);
 
    try
    {
        a [10] = 10;
    }
    catch (runtime_error err)
    {
        cout << "Neco se nepovedlo: " << err.what () << endl;
    }
 
    for (int i = 0; i < a.cnt; i++)
        cout << i << " ... " << a [i] << endl;
 
    cout << "O.K.";
    return 0;
}
 
zpro/pole.txt · Last modified: 2020/12/16 17:18 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki