Struktury , wskaźniki i tablice

0

Witam, nie wiem czemu nie działa mi wypisywanie odległości każdego punktu od środka układu współrzędnych. Myślałam nad dodaniem wskaźnika, jednak po próbach jego dodania program nie działał. Proszę o pomoc.

#include<iostream>
#include<ctime>
#include<cstdlib>
#include<iomanip>
#include<math.h>



using namespace std;

struct point {
    int x;
    int y;
};


const int p=10;
point punkt[10];
// Deklaracje funkcji

float wypelnianie(int Point[p]);// wype³nianie tablicy
//Point …(…); // szukanie max. oddalonego punktu
float length(int Point[p], double& odleglosc, int *wskodl); // odleg³oœæ punktu od œrodka wsp.
void drukowanie(int Point[p], double& odleglosc, int *wskodl);// drukowanie tablicy

int main()
{

    double odleglosc = 0;
    int Point[p];
    int *wskodl=&Point[0];
    wypelnianie(Point);
    length(Point, odleglosc, wskodl);
    drukowanie(Point, odleglosc,wskodl);

}
// Definicje funkcji
float wypelnianie(int Point[p])
{
    srand(time(NULL));
    for(int i = 0 ; i < 10 ; i++)
    {
        punkt[i].x=rand()%198-99;
        punkt[i].y=rand()%198-99;
    }
}

float length(int Point[p], double& odleglosc, int *wskodl)
{
    for(int i = 0 ; i < 10 ; i++)
    {
    odleglosc = sqrt(pow(punkt[i].x,2)+pow(punkt[i].y,2));
    wskodl++;
    }
    return *wskodl;
}

void drukowanie(int Point[p], double& odleglosc, int *wskodl)
{
    for(int i = 0 ; i < 10 ; i++)
    {
        odleglosc = length(Point, odleglosc, wskodl);
        cout << "Punkt " << i << " o wspolrzednych: (" << punkt[i].x << "," << punkt[i].y << ") jest oddalony o " << length(Point,odleglosc,wskodl) << endl;
    }
}
0
#include <iostream>
#include <cmath>
using namespace std;

struct point {
	int x, y;
	double length() {
		return sqrt(pow(x, 2)+pow(y, 2));
	}
};

int main() {
	point input;
	while(cin >> input.x >> input.y) {
		cout << input.length() << endl;
	}
	return 0;
}

http://ideone.com/h0XvML

Nie bardzo rozumiem powód twoich potyczek ze wskaźnikami, dlatego musisz się lepiej wytłumaczyć, jeśli chcesz lepszego gotowca.

0

chyba za bardzo nie wiesz co piszesz przykład:

float wypelnianie(int Point[p])
{
    srand(time(NULL));
    for(int i = 0 ; i < 10 ; i++)
    {
        punkt[i].x=rand()%198-99;
        punkt[i].y=rand()%198-99;
    }
}
  1. po co przekazujesz int Point[p], skoro nie używasz
  2. deklarujesz że zwracasz float, a nie zwracasz nic

w innych funkcjach jest jeszcze gorzej. To wygląda, jakbyś wziął kilka kodów źródłowych i bez pomysłu pomieszał, mając nadzieję, że zadziała.

0

w dwa tygodnie mam nauczyć się programowania od podstaw, wiem, że to niemożliwe, ale przynajmniej próbuję
czyli w tej funkcji muszę dać void wypelnianie(a tu nie wiem co wstawic)
nawet nie wiem jak mam zacząć poprawiać ten program

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



using namespace std;

struct Punkty {
    int x;
    int y;
};
Punkty punkt[10];  // definicja tablicy struktur typu Punkty

void wypelnianie();
void drukowanie();

int main()
{
    wypelnianie();
    drukowanie();
}
void wypelnianie()
{
    srand(time(NULL));
    for(int i = 0 ; i < 10 ; i++)
    {
        punkt[i].x=rand()%198-99;
        punkt[i].y=rand()%198-99;
    }
}

void drukowanie()
{
        for(int i = 0 ; i < 10 ; i++)
    {
        cout << "Punkt " << i << " o wspolrzednych: (" << punkt[i].x << "," << punkt[i].y << ")" << endl;
    }
}

czy tak jest prawidłowo ?

0

Zależy co chcesz uzyskać, ogólnie może być to prawidłowo, ale na pewno nie ładnie - zmienne globalne to nie jest dobry pomysł.

0

Mniej-więcej tak to będzie wyglądało, jeśli studenckim stylu będziesz chciał całość przekazywać jak należy.

#include <iostream>
#include <cstdlib>
using namespace std;

struct range {
	int min, max;
};

struct point {
	int x, y;
};

point random_point(range x_range, range y_range) {
	return {
		(rand()%x_range.max)+x_range.min,
		(rand()%y_range.max)+y_range.min
	};
}

void randomize_points(point *points, size_t size, range x_range, range y_range) {
	while(size --> 0) {
		points[size] = random_point(x_range, y_range);
	}
}

void view_point(point const &p) {
	cout << "{x: " << p.x << ", y: " << p.y << "}";
}

void view_points(point *points, size_t size) {
	for(size_t i = 0; i < size; ++i) {
		view_point(points[i]);
		cout << endl;
	}
} 

int main() {
	range x_range { 0, 100 }, y_range { 0, 100 };
	point points[10];
	randomize_points(points, 10, x_range, y_range);
	view_points(points, 10);
	return 0;
}

http://ideone.com/h6T04W

ew

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

template<typename T>
struct range {
	using value_type = T;
	//TODO: assert min <= max
	value_type min, max;
};

struct point {
	using value_type = int;
	value_type x, y;
	
	static point random(range<value_type> x_r, range<value_type> y_r) {
		//TODO: use <random> instead of filthy rand
		return {
			(rand()%x_r.max)+x_r.min,
			(rand()%y_r.max)+y_r.min
		};
	}
	
	friend ostream &operator<<(ostream &os, point const &p) {
		return os << "{x: " << p.x << ", y: " << p.y << "}";
	}
};
int main() {
	range<point::value_type>
		x_range { 0, 100 },
		y_range { 0, 100 };
	      
	vector<point> points;
	generate_n(back_inserter(points), 10, [&] {
		return point::random(x_range, y_range);
	});
	
	for_each(begin(points), end(points), [](auto &&p) {
		cout << p << endl;
	});
	return 0;
}

http://ideone.com/HvcbxC

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