2016-11-22 3 views
1

20要素の配列で助けが必要です。C++での配列圧縮と検索(基本)

各要素の絶対値を見つける必要があり、値が1未満の場合は配列からこの要素を削除します。その後、配列の最後に、削除された要素の代わりに0を入れます。

私はこれを行うのに役立ついくつかの機能を探しています。

これは私のコードです:

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



int OddSumm(int arr[], int lenght) 
{ 
    int i,p,z; 
    p=0;   
    for (i=0; i<lenght; i++) 
     if(arr[i]%2!=0 && arr[i]!=0){ 
      p+=arr[i]; 
     } 
    return p; 
} 

int SummBetweenNegativeNumbers(int arr[], int lenght) { 
    int s,i,r,z; 
    s=0;  

    for (i=0; i<lenght; i++) 
     if(arr[i]<0){ 
      i++; 
      r=i; 
      for (i=r; i<lenght; i++) 
      if(arr[i]<0){ 
      --i; 
      z=i; 
      for (i=r; i<=z; i++) 
      s+=arr[i]; 

} 
} 
    return s; 
} 

int main(int argc, char *argv[]) 
{ 
    int var; 
    int i,arr[20]; 
    int s,p,lenght; 
    lenght=20; 


    { 
     printf("Type in %d elements \n",lenght); 
      for (i=0; i<lenght; i++) 
       scanf("%d", &arr[i]); 
    } 

    p=OddSumm(arr,lenght); 
    s=SummBetweenNegativeNumbers(arr,lenght); 

    printf("\n\t 1a)Odd numbers summ: %d",p); 
    printf("\n\t 1b)Elements summ between negativ numbers: %d", s); 
    printf("\n\t 2)Compressed array: "); 
     for(i=lenght-1; i>=0; i--) 
      printf(" %d",arr[i]); 
     printf("\n\n"); 
    system("pause"); 


return 0; 
} 
+4

コードを読み取ることができません。英語の記号(関数と変数の名前)の使用をお勧めします。それに加えて、質問自体はIMOが不明です。 '私はモジュール(abs)の各要素を置く必要があります'はどういう意味ですか? –

+0

絶対値は私が –

+0

のコードのほとんどが質問に無関係であると思われることです。要素の絶対値を取得するには、 'OddSum'または' SummBetweenNegativeNumbers'が必要だと思いません。 [mcve](最小限の強調) – user463035818

答えて

2
  1. あなたのデータを変換するために使用std::transform
  2. これらの非ゼロに

パディングゼロを埋めるために
  • 使用std::fillを圧縮するために使用std::remove

    サンプルコード

    #include <vector> 
    #include <cstdlib> 
    #include <iterator> 
    #include <algorithm> 
    #include <iostream> 
    
    int my_function(int value){ 
        value = std::abs(value); 
        return value<1 ? 0:value; 
    } 
    
    int main() 
    { 
        int v[]={0,1,2,-4,-5,3}; 
        std::transform(std::begin(v),std::end(v),std::begin(v),my_function); 
        auto end=std::remove(std::begin(v),std::end(v),0); 
        std::fill(end,std::end(v),0); 
        for(auto value : v)std::cout<<value<<' '; 
    }