PROGRAM C++ problem z max

ostrowwlkp
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 10 sty 2011, o 20:12
Płeć: Mężczyzna
Lokalizacja: Ostrów Wlkp

PROGRAM C++ problem z max

Post autor: ostrowwlkp »

Witam proszę o pomoc w wykonaniu wartości max z elementów tablicy.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){

int i, x, t, min, max,  menu, pdmenu, suma;

printf("Podaj liczbe elementow:	");
scanf("%d", &t);
fflush(stdin);

int tab[t];
srand((time(NULL)));

printf("Jak uzupełnic tablice?
"); 
printf("1. z klawiatury
"); 
printf("2. losowo
"); 
scanf("%d", &menu);
fflush(stdin);


switch(menu) {
    case 1: for(i=0;i<t;i++){
            printf(" %d.", i+1);
            scanf("%d", &tab[i]);
            }
            break;
    case 2: for(i=0;i<t;i++){
            tab[i]=rand() % 100;
            }
            break;
}
printf("
***********:
");
for(i=0;i<t;i++){
            printf(" %d. = %d
", i+1,tab[i]);
            
        }
printf("
***********:
");
printf(" 1. max
");
printf(" 2. min
");
printf(" 3. suma elementow parzystych
");
printf(" 4. mnozenie o podany wykladnik
");
printf(" 5. odwrotnosc
");

scanf("%d", &pdmenu);
printf("
***********:
");

switch(pdmenu) {
	
case 1:            
      
    for (i=0;i<t;i++){
        if (tab[i]>max) {
                        max=tab[i];
                         }
                     }
    printf("Najwieksza wartosc w tablicy wynosi:  %d
",max);
    break;
 
case 2:            
    
    for (i=0;i<t;i++){
        if (tab[i]<min) {
                        min=tab[i];
                         }
                     }
    printf("Najmniejsza wartosc w tablicy wynosi:  %d
",min);
    break;
        
case 3:


suma=0;
int i;
for (int i=0;i<=t;i++)
{
if (tab[i]%2==0) suma+=tab[i];
}
 printf("suma parzystych elementow tablicy wynosi:  %d 
",suma);
    break;
    
case 4:
     
    printf("Podaj liczbe?	");
		scanf("%d", &x);
		printf("
Wynik:
");
		for(i=0;i<t;i++){
            	printf("element %d. = %d
", i+1,tab[i]*x);
        	}
		break; 
  
case 5:
     
for(int i=0; i<t/2; i++)
{
int buff = tab[i];
tab[i] = tab[t-1-i];
tab[t-1-i] = buff;
}
printf("***********
");
for(i=0;i<t;i++){
printf(" %d. = %d
", i+1,tab[i]);    

}
break;

}

    system("PAUSE");
    return EXIT_SUCCESS;
}


norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

PROGRAM C++ problem z max

Post autor: norwimaj »

Twoim problemem nie jest policzenie wartości maksimum, tylko pozbycie się błędów z programu. W tym celu musisz go spróbować skompilować. Jak przeczytasz, co Ci napisze kompilator, to będziesz wiedział, co trzeba poprawić.

Po kolei:

Kod: Zaznacz cały

maks.c:76: error: redeclaration of ‘i’ with no linkage
maks.c:75: note: previous declaration of ‘i’ was here
Nie można dwa razy deklarować zmiennej. Jak już raz zadeklarujesz, (czyli napiszesz int i), to następna deklaracja może być dopiero wewnątrz nawiasów klamrowych, ale w Twoim wypadku może lepiej z tej opcji nie korzystaj. Jak już napisałeś int i na początku programu, to już później nie deklaruj nowych i.

Kod: Zaznacz cały

maks.c:76: error: ‘for’ loop initial declarations are only allowed in C99 mode
W standardzie C nie można pisać

Kod: Zaznacz cały

for (int i ... )
Zadeklarować zmienną trzeba wcześniej. Inaczej jest w C++.

Kod: Zaznacz cały

maks.c:76: note: use option -std=c99 or -std=gnu99 to compile your code
To jest podpowiedź, co musisz zrobić jeśli kategorycznie nie zgadzasz się z powyższym zakazem i chcesz pisać niezgodnie ze standardem C.

Kod: Zaznacz cały

maks.c:95: error: redefinition of ‘i’
maks.c:76: note: previous definition of ‘i’ was here
maks.c:95: error: ‘for’ loop initial declarations are only allowed in C99 mode
To już było, tylko tym razem dotyczy innego miejsca w kodzie (linia 95).

Kod: Zaznacz cały

maks.c:10: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
maks.c:19: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
maks.c:26: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
maks.c:46: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
maks.c:86: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
To nie są błędy, tylko ostrzeżenia. Nie sprawdzasz, czy operacja scanf udała się czy nie. Jeśli operacja się nie powiedzie, to Twój program może się zachować niezgodnie z oczekiwaniami. Możesz sprawdzić czy scanf się powiódł i, jeśli nie, wypisać odpowiedni komunikat dla użytkownika.

Kod: Zaznacz cały

maks.c:110: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
To jest chyba najmniej ważne.


Jak już się uporasz z tymi błędami, to kompilator wypluje następne (niezainicjowana zmienna max?) i znów będziesz poprawiał, i tak w kółko aż do skutku.

Powodzenia.
ODPOWIEDZ