Maksymalna liczba z tablicy

0

Cześć.
Problem wygląda następująco: program nie wykonuje tego, co mu każę, a mianowicie zamiast elementu max wyświetla element pierwszy tablicy. I to dziwne, bo patrzę na swój kod i wydaje mi się, że dobrze zaimplementowałem algorytm na wyszukanie elementu max.
Kod wygląda następująco:
plik Max.c

#include<Math.h>

double Max(double* tab, int n) {

	double max = tab[0];
	int i = 0;

	for (i = 0;i < n;i++)
		if (tab[i] > max)
			max = tab[i];

	return max;

}

plik Main.c

#define _CRT_SECURE_NO_WARNINGS


#include<stdio.h>

double Max(double* tab, int n);

void main() {
	int n;
	int j = 0;
	double* tab[20];
	double wynik;
	int x;
	printf("Program ma za zadanie wyznaczenie max tablicy, w tym celu wprowadz rozmiar tablicy: \n");
	scanf("%i", &n);

	while (j < n) {
		printf("Podaj element tablicy: ");
		scanf("%i", &x);
		tab[j] = x;

		j++;

	}

	wynik = Max(tab, n);
	printf("Maximum tablicy wynosi: %d", wynik);

}

Z góry dziękuję za wszelkie wskazówki. Niestety, jeszcze nie za bardzo kumam tych wskaźników, a ma być to zadanie zrobione w oparciu o właśnie wskaźniki.

3
  1. Mieszasz double z intami - Twoja zmienna x prawdopodobnie powinna być typu double (bo i taką masz tablicę) + powinieneś odpowiednio dostosować format (%lf zamiast %d).
  2. double* tab[20]; tworzy tablicę, której elementem są wskaźniki (tzn. tab[i] ma typ double* a samo tab to double**) - na pewno taki efekt chciałeś osiągnąć? IMO powinieneś mieć albo double tab[20];, albo double *tab = malloc(...);.
0
#include <iostream>
#include <cfloat>
float max(float * array, int size) {
	float max = array[0];
	for (int i  = 0; i < size; i++) {
		if (array[i] >= max)
			max = array[i];
	}
	return max;
}
int main() {
	float a [] = {-1, -2, -3};
	std::cout << max(a, 3); 
	return 0;
}
0
#include <stdio.h>
#include <stdlib.h>

double Max(double* tab, unsigned size);

int main() {
    double result = 0.0;
    double* tab = malloc(sizeof(double)*10);
    double tmp = 0.0;
    for(int i=0;i<10;i++){
        scanf("%lf", &tmp);
        *(tab+i) = tmp;
    }
    result = Max(tab, 10);
    printf("Maximum tablicy wynosi: %.2lf\n", result);
    free(tab);
    return 0;
}

double Max(double* tab, unsigned size)
{
    double max = tab[0];
    for(int i=0;i<size;i++)
        if(tab[i]>max)
            max = tab[i];
    return max;
}

0
#include <stdio.h>
#include <float.h>
#include <stdlib.h>

void inputTable(double * table, size_t size) {
    double * ptr = table + size;
    while(ptr-->table) {
        scanf("%lf", ptr);
    }
}

double Max(double * table, size_t size) {
    double max = DBL_MIN;
    double * ptr = table + size;
    while(ptr-->table) {
        max = *ptr > max ? *ptr: max;
    }
    return max;
}

int main(void) {
    size_t n;
    double * table;
    puts("Program ma za zadanie wyznaczenie max tablicy, w tym celu wprowadz rozmiar tablicy: ");
    scanf("%zu", &n);
    table = malloc(sizeof(table[0]) * n);
    if(table == NULL) goto fail;
    inputTable(table, n);
    printf("Maksimum w tablicy wynosi: %lf\n", Max(table, n));
    free(table);
    return EXIT_SUCCESS;
fail:
    return EXIT_FAILURE;
}
0

No dobra, zrobiłem tak jak @Patryk27 tu pisał, no i zamiast max wyszukuje minimum z tablicy. W plik Max.c dałem w instrukcji warunkowej zamieniłem warunek w drugą stronę i, co dziwne, teraz działa, jak miało działać, czyli wyszukuje maximum. Dziwne...

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