przekazywanie parametrow do funkcji, poczatki

0

Witam!

Zaczynamy na zajeciach zabawe z funkcjami.

Na wykladach bylo, ze jezeli chcemy pomiedzy funkcjami przenosic typ znakowy to ma byc w nawiasie tam gdzie przekazujemy parametry (char znak []) - czyli, ze char - typ znakowy a po co znaczek do tablicy [] to niewiem ale tak bylo wiec tak sie nauczylem.

Natomiast nie chce mi dzialac to. Zaczyna trybic dopiero, gdy slowo char poprzedze slowem const. A o tym na wykladach nie bylo. Sam program wtedy dziala.

Wklejam ponizej swoj program, prosze o nakierowanie czemu music byc to const, albo co zrobic zeby go byc nie musial (moze cos przeoczylem)

 

#include <iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;

void wczytaj_wektor (int rozmiar, float wektor[], const char nazwa)
{
	int i;
	cout << "Wektor " << nazwa << " :" << endl;
	
	for(i=0;i<rozmiar;i++)
	{
		cout << "Prosze podac element ["<<i+1 <<"]:" << endl;
		cin >> wektor[i];
	}
	
	
}

void wypisz_wektor (int rozmiar, float wektor[], const char nazwa)
{
	int i;
	cout << "Wektor " << nazwa << " to:" << endl;
	for(i=0;i<rozmiar;i++)
	{
		cout << wektor[i] << "   ";
	}
	cout << endl << endl;
}

float iloczyn_wektorow (int rozmiar, float wektor1[], float wektor2[])
{
	int i;
	float suma = 0;
	for(i=0;i<rozmiar;i++)
	{
		suma = suma + wektor1[i]*wektor2[i];
		
	}
	
	return suma;
}

int main ()
{
	int i,j,n;
	float suma;
	char znak;
	const int nmax = 100;
	float A[nmax]; float B[nmax];
	
	do
	{
	system ("cls");
	cout << "Witaj w programie!" << endl << endl;
	cout << "* program oblicza iloczyn skalarny wektorow A i B" << endl;
	cout << "* program oblicza .... " << endl << endl << endl;
	
	cout << "Prosze podac ilosc elementow wektorow A i B (<=" << nmax << "):" << endl << endl;
	cin >> n;
	
	if(n>0 && n<=nmax)
	{
		
		wczytaj_wektor(n,A,"A");
		wczytaj_wektor(n,B,"B");
		cout << endl << endl;
		wypisz_wektor(n,A,"A");
		wypisz_wektor(n,B,"B");
		cout << endl << endl;
		
		cout << "Iloczyn tych dwoch wektorow wynosi:" << endl;
		cout << iloczyn_wektorow(n,A,B) << endl << endl;
		
		suma = 0;
		suma = (iloczyn_wektorow(n,A,A) + iloczyn_wektorow(n,B,B))/ sqrt(iloczyn_wektorow(n,A,B));
		
		cout << endl << endl;
		cout << "Wynik to:" << endl;
		cout << suma << endl;
	}
	
	else
	cout << endl << "Podano zly rozmiar wektorow!" << endl << endl;
	
	cout << "[T] lub [t] - aby powtorzyc" << endl;
	cout << "Inny wybor spowoduje zamkniecie programu" << endl << endl;
	cin >> znak;
	}
	
	while(znak == 'T' || znak == 't');
	
	return 0;
}

Pozdrawiam i z gory dziekuje! :)

0

char to jeden znak. "A" to dwa znaki: 'A' oraz '\0', bo to jest łańcuch znaków. Jeżeli chcesz przekazać łańcuch znaków do funkcji to piszesz const char *napis albo const char napis[] ponieważ łańcuch znaków jest tablicą. Jeżeli chcesz przekazać jeden znak to piszesz po prostu char znak.

Jeden znak zapisujemy w ' ' a łańcuch w " ". Zdecyduj się co chcesz przekazać do funkcji.

0

no a na wykladach bylo wszedzie "A" w mainie a w parametrach char znak[] - chyba niewiedza prowadzacego albo cos :P

no dobra, to rozumiem. Dziekuje w takim razie :)

0

Skoro było "A" to musi być przynajmniej char znak[]. To jest łańcuch znaków więc przekazuje się go jak tablicę.

Brak const formalnie nie jest błędem, ale zawsze należy pisać to const jeżeli funkcja nie modyfikuje tej tablicy (const-correctness). W przypadku łańcuchów znakowych jest to troszkę bardziej skomplikowane, możesz o tym też poczytać.

0

tak ale musi byc poprzedzona slowem const, a na wykladach go nie bylo :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1