2015-01-15 5 views
-1

my programm는 while 루프에서 변경되는 변수의 많은 값을 계산하고 이러한 값을 배열에 저장 한 다음 최대 값을 검색해야합니다.동적 배열의 최대 값

내가 직면 한 문제는 값이 저장되지 않는다는 것입니다. 루프가 증가 할 때 새로운 계산 된 값이 선행 값을 부수고 어떻게 비교할 수 있습니까?

방금 ​​scanf를 저장하는 것으로 알고 있지만이 경우에는 작동하지 않습니다. 다른 포인터를 사용하여 배열 값을 사용해야합니까 ???

//// 문제를 설명하는 간단한 프로그램 !!!

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

float *tab; 
int main() 
{ 
float a; 
a=-1; 
int i; 
float tab[maxi]=0; 
int taille=10; 

for (i=0;i<taille; i++) 
{ 
    while (a < 30) 
    { 
    float s= -a*a+a+1; 
    tab=(float(*)) malloc(taille*sizeof (float)); 
    tab[i]=s; 

    if(tab[i]>= tab[maxi]) 
    { 
     maxi=tab[i]; 
     printf("\n maxi=%f",maxi); 
     break; 
    } 
    a=a+1; 
    } 

} 

    return 0; 
} 

미리 감사드립니다.

+0

표준 경고 : [캐스팅하지 않습니다] 제발 (http://stackoverflow.com/q/605845/2173917)'malloc()'의 리턴 값. –

+1

'맥시'란 무엇입니까? 이것은 심지어 컴파일합니까? –

+0

이것은 컴파일되지 않습니다. 맥시는 없습니다. 정의가 필요합니다. 무슨 뜻입니까 (float (*))? (float *)는 충분해야하고 –

답변

0

배열에 루프를 여러 번 다시 할당하므로 모든 할당이 이전 할당을 덮어 씁니다 (바꿉니다). 'float tab [maxi] = 0;'명령문 할당되지 않은 메모리에 기록 (당신은 분할 오류 또는 모두를 가지고?)

당신이 원하는 무엇의 논리는 명확하지 않다, 그러나 다음 적어도 올바른 C입니다 :

float *tab; 
int main() 
{ 
    float a= -1.0; 
    int i; 
    int taille=10; 
    int maxi= taille-1; 

    tab=(float *) malloc(taille*sizeof(float)); 
    tab[maxi]= 0; 

    for (i=0;i<taille; i++) 
    { 
     while (a < 30) 
     { 
      float s= -a*a+a+1; 
      tab[i]=s; 

      if(tab[i]>= tab[maxi]) 
      { 
       maxi=tab[i]; 
       printf("\n maxi=%f",maxi); 
       break; 
      } 
      a=a+1; 
     } 
    } 
    return 0; 
} 

시 : 루프 while (a < 30) 실제로 매번 tab [i]를 덮어 씁니다. 나는 이것이 당신이 원하는 것임을 가정합니다. 당신이 찾고있는 오류 (그들 중 하나)가 ir 일 수 있습니다.

0

귀하의 printf를 볼 때 최대 숫자를 maxi에 저장 하시겠습니까? 탭 [maxi]는 최대 (maxi + 1) 번째 숫자가 아니라 배열에서 (maxi + 1) 번째 숫자를 제공합니다.

현재 배열의 maxi + 1 번째 숫자보다 큰 모든 숫자를 비교합니다. 당신은 모든 숫자를 저장하고 가장 큰 숫자를 찾고 싶다고 말했습니까?

는이 경우 변수

float maxi=0; 

마다 새 번호로이 변수를 비교하여 사용할 수 있습니다. 숫자가 더 큰 경우, 당신은 그것을 무시하고, 당신은 아무것도하지 않습니다.

if(tab[i]>= maxi) maxi=tab[i]; 

귀하의 printf는 모든 숫자를 비교할 때 반복됩니다. 모든 숫자를 알기도 전에 검색/인쇄 최대 숫자.

0

감사합니다. 카이 알 수 있듯이 실제로는 간단했다 : 여기에 변수 맥시 를 사용하면 programm에, 그것은 작동합니다

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

float *tab; 
int main() 
{ 
float a= -1; 
int i; 
int taille=10; 

tab=(float *) malloc(taille*sizeof(float)); 
float maxi=0; 

for (i=0;i<taille; i++) 
{ 
    while (a < 10) 
    { 
     float s= -a*a+a+1; 
     tab[i]=s; 

     if(tab[i]>= maxi) 
     { 
      maxi=tab[i]; 
      break; 
     } 
     a=a+1; 
    } 

} 
printf("\n maxi=%f",maxi); 
return 0; 

}