Błąd w kodzie

Czandrasekar
Użytkownik
Użytkownik
Posty: 27
Rejestracja: 3 paź 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Nowy Jork
Podziękował: 10 razy

Błąd w kodzie

Post autor: Czandrasekar »

Witam, do poniższego kodu mam dwa pytania.
Czemu w funckji void max "printf" wywołuje mi kilka liczb,a nie wartość jedną maksymalna oraz funkcja void reverse, ma mi odwracać kolejność w tablicy, a tego nie robi ?

Za udzielone wskazówki będę bardzo wdzięczny.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define n 20

void li (double t1[]);
void sr(double t1[]);
void od(double t1[]);
void max(double t1[]);
void reverse(double t1[]);

int main()
{
  double t1[n];
	li(t1);
	sr(t1);
	od(t1);
	max(t1);
	reverse(t1);
  system("PAUSE");	
  return 0;


}
void li(double t1[])
{  
   srand(time(0));
   for(int i=0; i<n; ++i)
   {
   t1[i]=(double)(rand() / (RAND_MAX + 1.0) * 1.0);
   printf("numer indeksu %d wartosc = %lf
",i,t1[i]);
}
}

void sr(double t1[])
{
     

double sum;
	sum=0;
	for(int i=0;i<n;i++)
sum=sum+t1[i];
	printf("srednia=%lf
",sum/n);
}
void od(double t1[])
{
     
 double sum;
 double os;
double s;
sum=0;
for (int i=0;i<n;i++)
{sum=sum+t1[i];}
s=sum/n;
sum=0;
for (int i=0;i<n;i++)
{sum=sum+(t1[i]-s)*(t1[i]-s);}
os=sqrt(sum/n);
printf("odchylenie standardowe=%lf
",os/n);
}
void max(double t1[])

{    
     
     double max_value;
     int max_index;
     max_value=t1[0]; 
     max_index=0;
     for(int i=0;i<n;i++)
      {
                     if(t1[i] > max_value)
                     {
                     max_value=t1[i];
                     max_index=i;
                     printf("najwieksza wartosc = %lf
",max_value);
                     }
           }  

        
}    

void reverse(double t1[])

{
    double temp;
    for(int i=0; i<n/2; i++) 
    { t1[n-i-1]= t1[i];
      temp = t1[n-i-1];
      t1[i] = temp;
    }
}
Ostatnio zmieniony 4 sty 2008, o 14:32 przez Czandrasekar, łącznie zmieniany 1 raz.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

Błąd w kodzie

Post autor: Szemek »

tak pobieżnie przejrzałem
dla reverse
najpierw wypadałoby przypisać wartość tablicy do zmiennej temp, a później przypisywać wartość z jednej komórki do drugiej
dla max
printfa daj po pętli

[ Dodano: 4 Stycznia 2008, 14:48 ]
zobacz czy teraz program daje poprawne wyniki, bo nie analizowałem tego kodu głębiej
Czandrasekar
Użytkownik
Użytkownik
Posty: 27
Rejestracja: 3 paź 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Nowy Jork
Podziękował: 10 razy

Błąd w kodzie

Post autor: Czandrasekar »

dla max teraz dobrze działa , tylko jeszcze musiałem dodać break po printf.
Nie wiem tylko czy dobrze zrozumiałem wskazówki do reverse

Kod: Zaznacz cały

void reverse(double t1[])

{
    double temp;
    for(int i=0; i<n; i++) 
    { 

      temp = t1[n-i-1];
      t1[i] = temp;
      t1[n-i-1]= t1[i];
     
    }
}
co nie przyniosło oczekiwanych efektów.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Błąd w kodzie

Post autor: soku11 »

Hmpf... Ja bym napisal to poprostu tak:

Kod: Zaznacz cały

void max(double t1[])
{   
  double max_value;
  max_value=t1[0];

  for(int i=1;i<n;i++)
     if(t1[i] > max_value)
       max_value=t1[i];

  printf("Max wartosc: %f
",max_value);
}    
A jesli reverse ma tylko wyswietlac to nie latwiej tak:

Kod: Zaznacz cały

void reverse(double t1[])
{
  int i=n;
  printf("Odwrocona tablica: ");
  do
  {
    printf("%f",tab[i]);
    i--;
  }while(i>=0)
}
POZDRO
Czandrasekar
Użytkownik
Użytkownik
Posty: 27
Rejestracja: 3 paź 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Nowy Jork
Podziękował: 10 razy

Błąd w kodzie

Post autor: Czandrasekar »

soku11 w poleceniu nie mogę deklarować dodatkowej tablicy.
Szemek nic nie pomogło to co napisałeś.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Błąd w kodzie

Post autor: soku11 »

Nie wiem gdzie ja zadeklarowalem druga, ale spoko Ja poprostu wypisalem elementy w odwrotnej kolejnosci A jesli ma to zamienic calkowicie wewnetrzna strukture tablicy, to

Kod: Zaznacz cały

void reverse(double t1[])
{
  int temp;
  for(i=0;i<n/2;i++)
  {
    temp=t1[i];
    t1[i]=t1[n-i];
    t1[n-i]=temp;
  }
} 
Teraz dziala??
POZDRO
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Błąd w kodzie

Post autor: Rafal88K »

W reverse powinno być:

Kod: Zaznacz cały

      temp = t1[n-i-1];
      t1[n-i-1] = t1[i];
      t1[i] = temp;
Czandrasekar
Użytkownik
Użytkownik
Posty: 27
Rejestracja: 3 paź 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Nowy Jork
Podziękował: 10 razy

Błąd w kodzie

Post autor: Czandrasekar »

Dzięki, wszystko działa.
ODPOWIEDZ