[C] Kalkulator minut, sekund

Awatar użytkownika
Peter Zof
Użytkownik
Użytkownik
Posty: 585
Rejestracja: 30 cze 2012, o 16:07
Płeć: Mężczyzna
Lokalizacja: Warszawa (MIMUW) / Pułtusk
Podziękował: 88 razy
Pomógł: 66 razy

[C] Kalkulator minut, sekund

Post autor: Peter Zof »

Witam mam do napisania taki program:

Kalkulator dokonujący prostych operacji na czasach. Tempo (pace) to sposób na określanie szybkości przez podanie ilości minut i sekund potrzebnych na przebiegnięcie kilometra np. 5:00 min/km odpowiada prędkości 12km/h. Przy pomocy kalkulatora możemy policzyć jaki wynik osiągnelibyśmy na 5 km biegnąc tempem 4:20 obliczając wyrażenie: 4:20 * 5.

W kolejnych wierszach standardowego wejścia mamy wyrażenia typu: argument1 operator argument2 (elementy te są oddzielone dowolną liczbą spacji), aż do napotkania wiersza zawierającego liczbę 0.

Na przykład dla takich danych:

5:15 + 4:55
1:36:14 + 1:37:11
3:45 * 10

Ma wypisać:

10:10
3:13:25
37:30

Jak na razie mam tyle:

Kod: Zaznacz cały

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


int main()
{
	char tab[1000][19];
	int i = 0;
	int j = 0;

	while(scanf("%s", &tab[i][0]) != '0')
	{
		if(tab[i][0] == '0')
			break;

		for(j = 0; j < 19; j++)
		{
			if(tab[i][j] == ' ')
				printf(" ");

			printf("%c\n", tab[i][j]);
		}

		i++;
	}

	system("pause");
	return 0;
}
Bardzo proszę o pomoc, bo nie dam rady sam tego dalej pociągnąć :(
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10211
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2359 razy

[C] Kalkulator minut, sekund

Post autor: Dasio11 »

Kod: Zaznacz cały

	while(scanf("%s", &tab[i][0]) != '0')
	{
        ....
1. Funkcja int scanf( const char* format, ... ); wczytuje wejście do zmiennych i jako wynik zwraca liczbę argumentów, które udało się jej bezbłędnie przeczytać. Porównywanie tego wyniku do stałej '0' typu char nie spełnia funkcji, o której przypuszczalnie myślałeś: sprawdzenia, czy to już ostatnia linia.


2. Wymyśliłeś następujący schemat algorytmu: wczytaj wszystkie zadania, dla każdego z nich oblicz wynik i wypisz wszystkie wyniki. Sugeruję wygodniejsze podejście: dopóki zostały jeszcze jakieś zadania, wczytać jedno z nich, obliczyć i wypisać wynik. W ten sposób nie trzeba deklarować tablicy, która naraz pamięta wszystkie zadania, bo w każdym momencie zajmujemy się dokładnie jednym z nich. Pseudokod:

Kod: Zaznacz cały

Wczytaj zadanie;
while( zadanie != "0" )
{
    Wykonaj zadanie;
    Wypisz wynik;
    Wczytaj zadanie;
}

3. Ze względu na to, że program ma rozumieć argumenty podane w różnych formatach oraz różne argumenty, wczytanie zadania jest niełatwą częścią roboty. Proponuję zacząć tak:

Kod: Zaznacz cały

#include <stdio.h>
#include <string.h>

int main()
{
   char line[100];
   char arg1[5];
   char arg2[5];
   char op;

   fgets( line, 100, stdin );
   while( strcmp( line, "0\n" ) != 0 )
   {
       sscanf( line, "%s %c %s", arg1, &op, arg2 );

       /* Reszta kodu. */

       fgets( line, 100, stdin );
   }

   return 0;
}
Przykładowo, dla wejścia 3:45 * 10 dostaniemy:

Kod: Zaznacz cały

arg1 = "3:45"
arg2 = "10" 
op = '*'
W reszcie kodu trzeba rozstrzygnąć, jakiego typu są to argumenty i który to operator, a potem wykonać zadane działanie i wypisać wynik.
ODPOWIEDZ