różnica między programami

0

Dlaczego 2 program daje taki sam wynik co 1 program skoro podaje 5 elementów do tablicy 4 elementowej?

#include <iostream>
using namespace std;

int main() {
   int n;
   cout<<"Enter the size of array: ";
   cin>>n;
   int arr[n];
   cout<<"Enter array elements: ";
   for(int i=0; i<n; i++)
      cin>>arr[i];

   for(int i=0; i<n; i++)
       cout<<arr[i];
  return 0;
}
#include <iostream>
using namespace std;

int main() {
   int n;
   cout<<"Enter the size of array: ";
   cin>>n;
   int arr[n-1];
   cout<<"Enter array elements: ";
   for(int i=0; i<n; i++)
      cin>>arr[i];

   for(int i=0; i<n; i++)
       cout<<arr[i];
  return 0;
}
2

Ponieważ dalej idzie cały wolny stos ...

1

Masz w tym programie UB, zachowanie nie jest zdefiniowane. Obserwacja, że w tym przypadku się udało nic nie znaczy.

0

@_13th_Dragon @kq
Cały program wygląda tak, chodziło mi o to co dzieje się w funkcji main. Program szuka wartości minimalnej w tablicy, czy wszystko się zgadza? Użyłem vector

#include <iostream>
#include <vector>
using namespace std;

int t_min(vector<int> arr) {

    for (unsigned int i=0;i<=arr.size();i++)
        if(arr[0]>arr[i]) arr[0]=arr[i];

    return arr[0];
}

int main() {    

    int x,size;
    cout<<"Enter the size of array: ";
    cin>>size;
    vector<int> arr;
    cout << "Enter array elements: ";
    for (int i = 0; i < size; i++) {
        cin >> x;
        arr.push_back(x);
    }

    cout<<t_min(arr)<<endl; 

    return 0;
}
1
micw napisał(a):

@_13th_Dragon @kq
Cały program wygląda tak, chodziło mi o to co dzieje się w funkcji main. Program szuka wartości minimalnej w tablicy, czy wszystko się zgadza? Użyłem vector

Nic się nie zgadza: https://ideone.com/9cIGPN
1) używasz n+1 elementów w wektorze n-elementowym
2) nie sprawdzasz czy liczby zostały wczytane
3) komunikaty Ci się sklejają

3

UWAGA, pisane z palca

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;

int t_min(const &vector<int> arr) // da się bez modyfikacji tym samym kosztem - należy to zrobić
{
    int ret=0; // coś trzeba zwrócić jeżeli tablica pusta
    for (size_t i=0;i<arr.size();++i) // typ zwracany przez size(), i<size() thanks @Botek
        if(ret>arr[i]) ret=arr[i];
    return ret];
}

int main() // dla obliczenia minimalnego elementu z wprowadzonych nie potrzebujesz tablicy
{    
    size_t size; //aby użytkownik nie podał ujemnego rozmiaru
    int x;
    cout<<"Enter the size of array: ";
    if((cin>>size)&&(size)) // aby użyszkodnik nie podał liter lub 0
    {
       vector<int> arr(size); // ustawienie odpowiedniego rozmiaru przy tworzeniu, przyspieszy wykonanie
       cout<<"Enter array elements: ";
       // da się wczytać prościej:
       // istream_iterator<int> ii(cin);
       // copy_n(ii,size,begin(arr));
       for (int i=0;i<size;++i)
       {
            cin >> x;
            arr[i]=x; // j.w, wtedy można wpisywać w konkretną pozycję
       }
       cout<<t_min(arr)<<endl; 
       cout<<min_element(begin(arr),end(arr))<<endl; // masz już gotową funkcje
    }
    return 0;
}

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