Mam do wykonania nastepujace zadanie:
Stworzyc symulator potencjalu grawitacyjnego dfa dowolnej liczby cial o punktowych rozmiarach, zadanych masach i polozeniach na plaszczyznie.
Specyfikacja:
- dowolne rozmiary obszaru okreslone przez uzytkowanika przy uruchomieniu programu
- dowolna liczba cial (oznaczonych kolejnymi literami alfabetu 'A'=asci 65), mozliwosc dodawania i usuwania cial oraz zmiany ich parametrow (masy i polozenia)
- wyswietlana wartosc kodowana w sposob dyskretny za pomoca cyfr od 9 (najmniejsza wartosc) do 0 (najwieksza wartosc)
-mozliwosc wydrukwoania do pliku dokladnej wartosci wypadkowego potencjalu dla poszczegolnych "pikseli".
Problem występuję w funkcji a dokładniej w linii przy case 1, treść błędu Untitled1.cpp cannot convertchar (*)[26]' to
char*' for argument4' to
void dodaj(cialo**, int, int, char*, int*)' Proszę o ocenę programu i wytłumaczenie błędów
do{
printf("Co chcesz zrobic?\n1. Dodaj cialo\n0. Wyjdz\n2. Usun\n3. Wyswietl\n4. Zmien mase\n5. Zmien polozenie\n6. Oblicz potencjal\n");
scanf("%i", &p);
switch(p){
case 1:
dodaj(obszar, n, m, &alf, &licz);
break;
case 2:
usun(obszar, n, m);
break;
case 3:
przydzial(obszar, n, m);
wyswietl(obszar, n, m);
break;
case 4:
zmien_mase(obszar, n, m);
break;
case 5:
zmien_polozenie(obszar, n, m);
break;
case 6:
oblicz_potencjal(obszar, n, m);
break;
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const float G = (6.67)*pow(10, -11);
struct cialo{
char c;
float masa;
int x;
int y;
int id;
float potencjal;
int przydzial;
};
void oblicz_potencjal(struct cialo **tab, int n, int m){
int i, j;
float potencjal = 0;
float r;
int idd;
printf("Podaj id ciala, ktorego potencjal chcesz obliczyc. Dostepne: \n");
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("%i ", tab[i][j].id);
}
}
scanf("%i", &idd);
int x1, y1;
float m1;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id == idd)
x1 = tab[i][j].x;
y1 = tab[i][j].y;
}
}
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id =! -1){
r = sqrt(pow((x1-tab[i][j].x), 2) - pow((y1-tab[i][j].y), 2));
potencjal += (-G)*(tab[i][j].masa/r);
}
}
}
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id == idd)
tab[i][j].potencjal = potencjal;
}
}
printf("Potencjal: %f\n", potencjal);
}
void przydzial(struct cialo **tab, int n, int m){
int i, j;
float suma = 0;
float potencjal;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
while(tab[i][j].id =! -1){
suma += tab[i][j].potencjal;
}
}
}
float przedzial;
przedzial = suma / 10;
printf("Przedzial: %f\n", przedzial);
for(i=0; i<n; i++){
for(j=0; j<m;j++){
if(tab[i][j].potencjal <= 0 && tab[i][j].potencjal >= przedzial)
tab[i][j].przydzial = 0;
if(tab[i][j].potencjal <= przedzial && tab[i][j].potencjal >= 2*przedzial)
tab[i][j].przydzial = 1;
if(tab[i][j].potencjal <= 2*przedzial && tab[i][j].potencjal >= 3*przedzial)
tab[i][j].przydzial = 2;
if(tab[i][j].potencjal <= 3*przedzial && tab[i][j].potencjal >= 4*przedzial)
tab[i][j].przydzial = 3;
if(tab[i][j].potencjal <= 4*przedzial && tab[i][j].potencjal >= 5*przedzial)
tab[i][j].przydzial = 4;
if(tab[i][j].potencjal <= 5*przedzial && tab[i][j].potencjal >= 6*przedzial)
tab[i][j].przydzial = 5;
if(tab[i][j].potencjal <= 6*przedzial && tab[i][j].potencjal >= 7*przedzial)
tab[i][j].przydzial = 6;
if(tab[i][j].potencjal <= 7*przedzial && tab[i][j].potencjal >= 8*przedzial)
tab[i][j].przydzial = 7;
if(tab[i][j].potencjal <= 8*przedzial && tab[i][j].potencjal >= 9*przedzial)
tab[i][j].przydzial = 8;
if(tab[i][j].potencjal <= 9*przedzial && tab[i][j].potencjal >= 10*przedzial)
tab[i][j].przydzial = 9;
}
}
}
void dodaj(struct cialo **tab, int n, int m, char *alf, int *licz){
struct cialo nowe;
printf("Podaj mase: ");
scanf("%f", &nowe.masa);
printf("Podaj wspolrzedna x = ");
scanf("%i", &nowe.x);
while(nowe.x>n){
printf("Wychodzisz poza obszar!");
printf("Podaj wspolrzedna x = ");
scanf("%i", &nowe.x);
}
printf("Podaj wspolrzedna y = ");
scanf("%i", &nowe.y);
while(nowe.y>m){
printf("Wychodzisz poza obszar!");
printf("Podaj wspolrzedna y = ");
scanf("%i", &nowe.y);
}
nowe.id = (*licz);
++(*licz);
printf("%i\n", licz);
nowe.c = alf[nowe.id];
tab[nowe.x][nowe.y] = nowe;
printf("m = %f x = %i y = %i", tab[nowe.x][nowe.y].masa, tab[nowe.x][nowe.y].x, tab[nowe.x][nowe.y].y);
printf("%c\n", tab[nowe.x][nowe.y].c);
}
void usun(struct cialo **tab, int n, int m){
printf("Podaj id ciala, ktore chcesz usunac. Dostepne: \n");
int i, j;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("%i ", tab[i][j].id);
}
}
int s;
scanf("%i", &s);
struct cialo puste = {0, 0, n, m, -1};
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id == s){
tab[i][j] = puste;
}
}
}
}
void wyswietl(struct cialo **tab, int n, int m){
int i, j;
float po = tab[0][0].potencjal;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("%c%i\t", tab[i][j].c, tab[i][j].przydzial);
}
printf("\n");
}
}
void zmien_mase(struct cialo **tab, int n, int m){
printf("Podaj id ciala, ktorego chcesz zmienic mase. Dostepne: \n");
int i, j;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("%i ", tab[i][j].id);
}
}
int s;
scanf("%i", &s);
printf("Podaj nowa mase: ");
float nowa_m;
scanf("%f", &nowa_m);
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id == s){
tab[i][j].masa = nowa_m;
}
}
}
}
void zmien_polozenie(struct cialo **tab, int n, int m){
printf("Podaj id ciala, ktorego chcesz zmienic polozenie. Dostepne: \n");
int i, j;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("%i ", tab[i][j].id);
}
}
int s;
scanf("%i", &s);
printf("Podaj nowe polozenie:\nx = ");
int n_x, n_y;
scanf("%i", &n_x);
printf("Podaj nowe polozenie:\ny = ");
scanf("%i", &n_y);
struct cialo puste = {0, 0, n, m, -1};
struct cialo nowe;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(tab[i][j].id == s){
nowe = tab[i][j];
nowe.x = n_x;
nowe.y = n_y;
tab[i][j] = puste;
tab[n_x][n_y] = nowe;
}
}
}
}
int main()
{
int n, m;
printf("Podaj wymiary obszaru:\nn = ");
scanf("%i", &n);
printf("m = ");
scanf("%i", &m);
int w = n+1;
int k = m+1;
char alf[26];
char c = 'A';
int licz = 0;
int i;
for(i=0; i<26; i++){
alf[i] = c;
c++;
printf("%c", alf[i]);
}
struct cialo **obszar;
obszar = (struct cialo**)malloc(n*sizeof(struct cialo*));
for(i=0; i<m; i++)
obszar[i]=(struct cialo*)malloc(m*sizeof(struct cialo));
int j;
struct cialo puste = {0, 0, n, m, -1, 1, -1};
for(i=0; i<n; i++){
for(j=0; j<m; j++)
obszar[i][j] = puste;
}
int p;
do{
printf("Co chcesz zrobic?\n1. Dodaj cialo\n0. Wyjdz\n2. Usun\n3. Wyswietl\n4. Zmien mase\n5. Zmien polozenie\n6. Oblicz potencjal\n");
scanf("%i", &p);
switch(p){
case 1:
dodaj(obszar, n, m, &alf, &licz);
break;
case 2:
usun(obszar, n, m);
break;
case 3:
przydzial(obszar, n, m);
wyswietl(obszar, n, m);
break;
case 4:
zmien_mase(obszar, n, m);
break;
case 5:
zmien_polozenie(obszar, n, m);
break;
case 6:
oblicz_potencjal(obszar, n, m);
break;
}
}while(p!=0);
return 0;
}