• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SPOJ zadanie CALC2

Object Storage Arubacloud
0 głosów
260 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez mario5551 Użytkownik (550 p.)

Witam robię zadanie ze SPOJA Kalkulator 2, niestety mój kod program się wykrzacza i nie wiem co może być tego przyczyną. Ma ktoś jakieś pomysły? Z góry dziękuję za pomoc smiley

#include "stdafx.h"
#include "iostream"
#include "cstdlib"

using namespace std;

int* zwieksz_rozmiar(int *wyniki)
{
	int* tablica_nowa = new int[sizeof(wyniki)+1];

	memcpy(tablica_nowa, wyniki, sizeof(wyniki) * sizeof(int)); // kopiowanie mniejszej tablicy do nowej większej

	delete[] wyniki;
	
	wyniki = tablica_nowa;	// nowa tablica otrzymuje nazwe starej tablicy
	return wyniki;
}

int main()
{
	int rejestr[10] = { 0,0,0,0,0,0,0,0,0,0 };	//pamięć kalkulatora
	char operacja;		 //znak operacji
	int liczba1,liczba2; //zestawy
	int *wyniki = new int [1];   
	int i = 0;

	while (cin >> operacja >> liczba1 >> liczba2)
	{
		switch (operacja)
		{
			case 'z':	rejestr[liczba1] = liczba2;						 break;
			case '+':	wyniki[i] = rejestr[liczba1] + rejestr[liczba2]; break;
			case '-':	wyniki[i] = rejestr[liczba1] - rejestr[liczba2]; break;
			case '*':	wyniki[i] = rejestr[liczba1] * rejestr[liczba2]; break;
			case '/':	wyniki[i] = rejestr[liczba1] / rejestr[liczba2]; break;
			case '%':	wyniki[i] = rejestr[liczba1] % rejestr[liczba2]; break;
		}
		wyniki = zwieksz_rozmiar(wyniki);  //zwiększanie miejsca w tablicy o 1
		i++;
	}

	i = 0;
	while (i < sizeof(wyniki))	//wypisz wyniki
	{
		cout << wyniki[i] << endl;
		i++;
	}

	delete [] wyniki;
    return 0;
}

 

komentarz 17 maja 2018 przez Mariusz08 Maniak (62,300 p.)
Zła kategoria

1 odpowiedź

0 głosów
odpowiedź 17 maja 2018 przez RafalS VIP (122,820 p.)
wybrane 17 maja 2018 przez mario5551
 
Najlepsza
Sizeof na wskazniku przekazanym do funkcji zawsze zwroci wielkość samego wskaznika, a nie tablicy. Dziala to tylko na oryginalnej tablicy. Do funkcji przekazujesz kopie wskaznika.
komentarz 17 maja 2018 przez mario5551 Użytkownik (550 p.)
edycja 17 maja 2018 przez mario5551

ok bardzo trafna uwaga, poprawiłem kod i działa tak jak jest w instrukcji ale sędzia wywala mi błąd kompilacji sad

#include "iostream"
#include "cstdlib"

using namespace std;

int *zwieksz_rozmiar(int *wyniki, int rozmiar)
{
	int* tablica_nowa = new int[rozmiar];

	memcpy(tablica_nowa, wyniki, rozmiar * sizeof(int)); // kopiowanie mniejszej tablicy do nowej większej

	delete[] wyniki;
	
	wyniki = tablica_nowa;	// nowa tablica otrzymuje nazwe starej tablicy
	return wyniki;
}

int main()
{
	int rejestr[10] = { 0,0,0,0,0,0,0,0,0,0 };	//pamięć kalkulatora
	char operacja;		 //znak operacji
	int liczba1,liczba2; //zestawy
	int rozmiar = 1 , *wyniki = new int [rozmiar];
	int i = 0;  //iterator

	while (cin >> operacja >> liczba1 >> liczba2)
	{
		if (operacja == 'z')rejestr[liczba1] = liczba2;
		else
		{
			switch (operacja)
			{
				case '+':	wyniki[i] = rejestr[liczba1] + rejestr[liczba2]; break;
				case '-':	wyniki[i] = rejestr[liczba1] - rejestr[liczba2]; break;
				case '*':	wyniki[i] = rejestr[liczba1] * rejestr[liczba2]; break;
				case '/':	wyniki[i] = rejestr[liczba1] / rejestr[liczba2]; break;
				case '%':	wyniki[i] = rejestr[liczba1] % rejestr[liczba2]; break;
			}
			rozmiar++;
			wyniki = zwieksz_rozmiar(wyniki, rozmiar);  //zwiększanie miejsca w tablicy o 1
			i++;
		}
	}

	i = 0;
	
	while (i < rozmiar-1)	//wypisz wyniki
	{
		cout << wyniki[i] << endl;
		i++;
	}

	delete [] wyniki;
    return 0;
}

oto błąd:

prog.cpp: In function ‘int* zwieksz_rozmiar(int*, int)’:
prog.cpp:10:52: error: ‘memcpy’ was not declared in this scope
  memcpy(tablica_nowa, wyniki, rozmiar * sizeof(int));
                                                    ^
komentarz 17 maja 2018 przez mario5551 Użytkownik (550 p.)
wystarczyło dodać bibliotekę #include "cstring" i się udało :-)

Podobne pytania

0 głosów
0 odpowiedzi 310 wizyt
pytanie zadane 8 grudnia 2019 w Java przez echofoxtrot Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 196 wizyt
pytanie zadane 28 października 2018 w C i C++ przez piter11251 Obywatel (1,280 p.)
0 głosów
1 odpowiedź 638 wizyt
pytanie zadane 22 lipca 2017 w C i C++ przez GaNdAlFf56 Początkujący (380 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...