Funkcja, której argumentem jest tablica typu struktury - jak się odwołać?

0

Jak w temacie, nie wiem jak się odwołać do funkcji, której argumentem pobieranym będzie tablica, której typem jest struktura... Brzmi to trochę głupio ale już tłumaczę o co chodzi. Mam napisać taki kod, w którym muszę użyć funkcji, a jej argumentem ma być tablica struktury

struct 
#define rozmiar 1
#define nap 20

Struktura{
	int liczba;
	char napis[nap];
};

int main(){
	
	int i;
	Struktura tab[rozmiar];

	for (i=0; i<rozmiar; i++)
	{
		cout<<"Podaj liczbe:"<<endl;
		cin>>tab[i].liczba;
		cout<<"Podaj napis:"<<endl;	
		cin>>tab[i].napis;	
	}
	for (i=0; i<rozmiar; i++)
}

Tak mniej więcej ma wyglądać ta struktura i moja tablica o typie struktury danych.

Jak mam zrobić funkcję, abym mógł w każdym elemencie tablicy modyfikować moimi wartościami? Abym mógł dodać funkcję, którą zapętle w taki sposób:

for(i=0;i<ROZ; i++)
funkcja(tab[i]);

a moja funkcja będzie robiła, że pomnoży tab[i].liczba *2, a w tab[i].napis doda literę f na koniec?

Czego nie rozumiem- nie wiem jak tą funkcje napisać. Wartość, którą zwraca funkcja to "Struktura"

Struktura funkcja(tab[])

Nie mogę tutaj wstawić pustego nawiasu kwadratowego, bo się nie skompiluje, muszę podać jakąś wartość, a wartość ma być podana w main() czyli na zewnątrz.

`dodanie znaczników ``` - @furious programming

0

Nie bardzo rozumiem, masz zmodyfikować daną, czy na podstawie struktury zwrocić nową zmodyfikowaną strukturę. Dodatkow w C, czy w C++?

1
void f(Struktura tab[])
{
	tab[0].liczba *= 2;
	tab[0].napis[0] = 'f';     // niezupelnie jak chciales, ale chodzi o idee
}

Z drugiej strony

Jak mam zrobić funkcję, abym mógł w każdym elemencie tablicy modyfikować moimi wartościami? Abym mógł dodać funkcję, którą zapętle w taki sposób:

for(i=0;i<ROZ; i++)
funkcja(tab[i]);

tab[i] to jeden element typu Struktura, czyli funkcja nie przyjmuje żadnej tablicy. Więc może zdecyduj się którą wersję chcesz.

0

Ciężko wywnioskować o co chodziło autorowi ale może o to:

#include <iostream>
#include <ctime>
#include <cstdlib>

struct Struktura
{
	int liczba;
	char napis[10];
};

// Inicjalizacja tablicy
void inicjalizuj(Struktura *&tab, int roz){
	for (int i = 0; i < roz; i++){
		tab[i].liczba = rand() % 100 + 1;
		tab[i].napis[0] = '\0';
	}
}

// Mnożenie liczby razy 2 i dodanie na końcu łańcucha znaku 'f' ilekroć wywoływana jest funkcja.
void modyfikuj(Struktura &str){
	str.liczba *= 2;
	for (int i = 0; i < 10; i++)
		if ((i + 1) < 10 && str.napis[i] == '\0'){
			str.napis[i + 1] = '\0';
			str.napis[i] = 'f';
			break;
		}
}

void wypisz(const Struktura &str){
	std::cout << "Liczba: " << str.liczba << ", Napis:" << str.napis << std::endl;
}

int main(int argc, char* argv[]){
	srand(time(NULL));

	Struktura *tab = new Struktura[3];
	inicjalizuj(tab, 3);

	// Zakładamy, że modyfikujemy tylko pierwszy element tablicy.
	modyfikuj(tab[0]);
	wypisz(tab[0]);		// Wypisze jedno 'f';
	modyfikuj(tab[0]);
	wypisz(tab[0]);		// Wypisze dwa 'f';

	for (int i = 0; i < 3; i++)
		modyfikuj(tab[0]);
	wypisz(tab[0]);		// Wypisze pięć 'f', bo pętla dodała kolejne trzy, naturalnie z odpowiednim iloczynem obiektu 'liczba'.

	delete[] tab;
	tab = nullptr;

	system("PAUSE");
	return 0;
}

https://ideone.com/rsOtLU

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