Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamicznie alokowana pamięc o podanym przez uzytkownika rozmiarze

Ostatnio zmodyfikowano 2017-03-28 23:15
Autor Wiadomość
woxik
Temat założony przez niniejszego użytkownika
Dynamicznie alokowana pamięc o podanym przez uzytkownika rozmiarze
» 2017-03-28 00:54:25
Witam wszystkich serdecznie ! Ostatnio na zajęciach dostałem, że mam napiasć program dynamicznie alokujacy pamięć o podanym przez uzytkownika rozmiarze gdzie elementami sa liczby typu int. A pozniej tak stworzona tablice wypełnić randomowymi liczbami. A na koniec uzywajac dodatkowej zmiennej wskaznikowej iterowac po zaalokowanym obszarze pamieci zamieniajac miejscami wszystkie elementy, dla ktorym biezacy element jest wiekszy od nastepnego.

Doszedlem do czegos takiego i w teorii zamienia ale na calkiem inne liczby i moje pytanie brzmi co źle robie, co powinienem zmienic ?

C/C++
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

using namespace std;

void swapper( int * p_a, int * p_b ) //1. wersja
{
    int temp = * p_a;
    * p_a = * p_b;
    * p_b = temp;
    return;
}
int main()
{
    int iMax;
    int rozmiar_tablicy;
    int wartosc;
    cout << "Max: ";
    cin >> iMax;
    cout << "Podaj rozmiar pamieci" << "\n";
    cin >> rozmiar_tablicy;
    cout << "stworzono tablice zlozonej z " << rozmiar_tablicy << "elementow" << "\n";
    int * liczba;
    liczba = new int[ rozmiar_tablicy ];
    for( int i = 0; i < rozmiar_tablicy; i++ ) {
        srand(( int ) time( NULL ) );
        //cout << "Wylosowana liczba to: ";
        wartosc = rand() % iMax;
        liczba[ i ] = wartosc;
        //cout << "Wartosci w tablicy liczba["<< i <<"]:" << liczba[i] << "\n";
        int podst = liczba[ i ];
        int wieksza = liczba[ i + 1 ];
        if( podst > wieksza ) {
            swapper( & wieksza, & podst );
        }
        cout << podst << "|" << wieksza << endl;
        //printf("podst = %d and wieksza = %d \n", podst, wieksza);
    }
   
    delete[] liczba;
    system( "PAUSE" );
}
P-159497
Bielan
» 2017-03-28 13:02:40

srand(( int ) time( NULL ) );
Wywołuj tylko raz przy starcie aplikacji.


Przemyśl jeszcze raz algorytm. Wypełniasz tablicę i edytujesz jednocześnie. Spróbuj najpierw to rozbić na dwa przebiegi i wypisuj sobie co się dzieje z twoją tablicą. 
P-159507
woxik
Temat założony przez niniejszego użytkownika
» 2017-03-28 23:15:51
z srand juz zmienilem : ) dziekuje za rade. A mówiąc ze edytuje to chodzi o swapper ?
EDIT:
ogolnie to rozumiem caly zamysł ale gubię się jak widze ze petla for wrzuca do tablicy tyle liczb ile zostalo podanej pamieci. I tutaj problemem jest to, ze wyswietlic poprawnie moge liczba(bedzie ona z przedzialu ktory podalem wyzej ) ale jakbym chcial kolejny element czyli liczba[i+1] wyswietlic w tej petli to wtedy pojawia mi sie liczba kompletnie nie z przedzialu ktory zostal wskazany wyzej. Jakas rada jak kazdy element wpisywac do innej zmiennej?

EDIT 2: zrobilem, juz wszystko dziala poprawnie. Ponizej udostepniam kod jakby ktos ptorzebowal

C/C++
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

using namespace std;

void swapper( int * p_a, int * p_b ) //1. wersja
{
    int temp = * p_a;
    * p_a = * p_b;
    * p_b = temp;
    return;
}
int main()
{
   
    srand(( int ) time( NULL ) );
    int iMax;
    int rozmiar_tablicy;
    int wartosc;
    cout << "Max: ";
    cin >> iMax;
    cout << "Podaj rozmiar pamieci" << "\n";
    cin >> rozmiar_tablicy;
    cout << "stworzono tablice zlozonej z " << rozmiar_tablicy << "elementow" << "\n";
    int * liczba;
    liczba = new int[ rozmiar_tablicy ];
    for( int i = 0; i < rozmiar_tablicy; i++ ) {
        //cout << "Wylosowana liczba to: ";
        wartosc = rand() % iMax;
        liczba[ i ] = wartosc;
        //cout << liczba[i] << "|";
    }
    for( int i = 0; i < rozmiar_tablicy - 1; i++ ) {
        cout << "LICZBA 1:" << liczba[ i ] << "\n";
        cout << "Liczba 2:" << liczba[ i + 1 ] << "\n";
        if( liczba[ i ] > liczba[ i + 1 ] ) {
            swapper( & liczba[ i ], & liczba[ i + 1 ] );
        }
        cout << "POLICZBA 1:" << liczba[ i ] << "\n";
        cout << "POLiczba 2:" << liczba[ i + 1 ] << "\n";
       
    }
    delete[] liczba;
    system( "PAUSE" );
}
P-159555
« 1 »
  Strona 1 z 1