Beispiel #1
0
int wczytuj_mnozenie_dzielenie(int *znak, int liczba1) {
    int operacja, liczba2;
    bool poprzednio_cyfra, ujemna;

    poprzednio_cyfra = true;
    operacja = *znak;
    liczba2 = 1; // Liczba neutralna dla mnozenia i dzielenia
    ujemna = false;

    do {
        // Jesli wprowadzilismy znak, ktory konczy wewnetrzna petle
        if ((*znak == '\n' || *znak == '+' || *znak == '-') && poprzednio_cyfra) {
            ustaw_jako_przeciwna(&liczba2, &ujemna);
            liczba1 = oblicz(operacja, liczba1, liczba2);
            break;
        // Jesli wczesniej byla cyfra, a teraz jest + lub - to wykonaj poprzednia operacje
        //   i zdefiniuj nowa jako nastepna
        } else if (poprzednio_cyfra && (*znak == '*' || *znak == '/')) {
            ustaw_jako_przeciwna(&liczba2, &ujemna);
            liczba1 = oblicz(operacja, liczba1, liczba2);
            poprzednio_cyfra = false;
            operacja = *znak;
        // Jesli cyfra, to wczytuj liczbe
        } else if (czy_cyfra(*znak)) {
            // Jesli poprzednio byl znak, to rozpocznij wczytywanie nowej liczby
            if (!poprzednio_cyfra) {
                poprzednio_cyfra = true;
                liczba2 = 0;
            // Jesli nie, to kontunuuj wczytywanie
            } else {
                liczba2 *= 10;
            }
            liczba2 += cyfra(*znak);
        // Jesli wczesniej byl znak, a teraz jest -, to zdefiniuj nastepna liczbe jako ujemna
        } else if (!poprzednio_cyfra && *znak == '-') {
            ujemna = true;
        // Jesli bedzie spacja, zignoruj, w przeciwnym wypadku wyswietl blad
        } else if (*znak != ' ') {
            wyswietl_blad(2);
        }
    } while (*znak = getchar());

    // Zwracamy wynik, a w *znak jest znak kolejnej operacji
    return liczba1;
}
Beispiel #2
0
Datei: gtk.c Projekt: foo/ii
static void dodaj_do_text(GtkWidget *widget, gpointer data) {
  if(strcmp((gchar*)data, "\n") == 0)
  {
        gtk_entry_append_text(GTK_ENTRY(text), (gchar*)"=");
        char* wejscie = gtk_entry_get_text (GTK_ENTRY (text));;
        int len = strlen(wejscie);
        char* wynik = oblicz(wejscie, len);
        gtk_entry_set_text(GTK_ENTRY(text), wynik);
    }
  if(strcmp((gchar*)data, "") == 0)
  {
        gtk_entry_set_text(GTK_ENTRY(text), "");
    }
  else 
    gtk_entry_append_text(GTK_ENTRY(text), (gchar*)data);
}
Beispiel #3
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    model = new QStandardItemModel(0,5,this);
    model->setHorizontalHeaderItem(0, new QStandardItem(QString("Nazwa pliku")));
    model->setHorizontalHeaderItem(1, new QStandardItem(QString("Rozszerzenie")));
    model->setHorizontalHeaderItem(2, new QStandardItem(QString("Rozmiar")));
    model->setHorizontalHeaderItem(3, new QStandardItem(QString("Ścieżka")));
    model->setHorizontalHeaderItem(4, new QStandardItem(QString("Wartość/Mb")));
    ui->wybran_wiersz->setVisible(false);
    ui->PodanyRozmiar->setVisible(false);
    ui->aktualnyRozmiar->setVisible(false);
    ui->plikiEtyketa->setVisible(false);
    ui->Rozmiar_etykieta->setVisible(false);
    connect(ui->przyciskUstawienia, SIGNAL(clicked()), this, SLOT(otworzUstawienia()));
    connect(ui->przyciskOblicz, SIGNAL(clicked()), this, SLOT(oblicz()));
    alg_plec = new algorytm_plecakowy();
    ui->Tabela->setModel(model);
    ilosc_elementow = 0;
    rozmiar = 0;
    wielkoscPlecaka = 1.44;
}
Beispiel #4
0
std::string Gamma::opis() {
    return std::to_string(oblicz());
}
Beispiel #5
0
std::string e::formatuj_wyrazenie() {
    return std::to_string(oblicz());
}
Beispiel #6
0
std::string operator2arg::opis() {

    return "Wartosc " + std::to_string(oblicz());

}
Beispiel #7
0
int main() {
    printf("-------------------------\n");
    printf("Sposób działania programu\n");
    printf("Wpisz wyrażenie i zatwierdź ENTERem\n");
    printf("Minus stojacy przed liczba oznacza liczbe ujemna\n");
    printf("Przykladowe wyrażenia:\n");
    printf("2*3 + 4*5    (zwraca 26)\n");
    printf("-10 - -3     (zwraca -7)\n");
    printf("-2/5 * 100   (zwraca 0, bo dzielenie jest calkowite, wiec -2/5 = 0)\n");
    printf("-------------------------\n\n");

    int znak, liczba1, liczba2, operacja;
    bool poprzednio_cyfra, ujemna;

    poprzednio_cyfra = false;
    operacja = '+';
    liczba1 = 0;
    liczba2 = 0;
    ujemna = false;

    znak = getchar();
    do {
        // Dlaczego to jest rozdzielne od pozostalych przypadkow?
        //   Poniewaz po wykonaniu tego bloku, po wykonaniu dzielenia i mnozenia
        //   mamy w znak jakas operacje - dodawania lub odejmowania i chcemy ja jeszcze zaladowac.
        if (poprzednio_cyfra && (znak == '*' || znak == '/')) {
            liczba2 = wczytuj_mnozenie_dzielenie(&znak, liczba2);
            poprzednio_cyfra = true;
        }

        // Jesli wczesniej byla cyfra, a teraz jest + lub - to wykonaj poprzednia operacje
        //   i zdefiniuj nowa jako nastepna
        if (poprzednio_cyfra && (znak == '+' || znak == '-')) {
            ustaw_jako_przeciwna(&liczba2, &ujemna);
            liczba1 = oblicz(operacja, liczba1, liczba2);
            poprzednio_cyfra = false;
            operacja = znak;
        // Jesli cyfra, to wczytuj liczbe
        } else if (czy_cyfra(znak)) {
            // Jesli poprzednio byl znak, to rozpocznij wczytywanie nowej liczby
            if (!poprzednio_cyfra) {
                poprzednio_cyfra = true;
                liczba2 = 0;
            // Jesli nie, to kontunuuj wczytywanie
            } else {
                liczba2 *= 10;
            }
            liczba2 += cyfra(znak);
        // Jesli wczesniej byl znak, a teraz jest -, to zdefiniuj nastepna liczbe jako ujemna
        } else if (!poprzednio_cyfra && znak == '-') {
            ujemna = true;
        // Jesli bedzie spacja zignoruj
        // Jesli jest jeden ze znakow z rozdzielnych przypadkow, rowniez nie reaguj
        // Jesli jednak jakis inny znak, to wyrzuc blad
        } else if (znak != ' ' && znak != '\n' && !(poprzednio_cyfra && (znak == '*' || znak == '/'))) {
            wyswietl_blad(2);
        }

        // Jesli wprowadzilismy symbol zakonczenia wprowadzania wyrazenia
        // Ta instrukcja nie jest w kolejnym ifie, bo po wyjsciu z mnozenia/dzielenia, mogl byc znak \n, wiec
        // trzeba tutaj to sprawdzic - jesli tak bylo, to trzeba zakonczyc program
        if (znak == '\n' && poprzednio_cyfra) {
            ustaw_jako_przeciwna(&liczba2, &ujemna);
            liczba1 = oblicz(operacja, liczba1, liczba2);
            break;
        }
    } while (znak = getchar());

    printf("\n\nWynik: %d", liczba1);
    return 0;
}