Jak to zapisać inaczej? Wpisywanie wartości do tablicy.

0

Mam za zadanie 2 [co najmniej] sposobami wpisać do tablicy określoną ilość cyfr. Np. podaję, że do tablicy chcę wpisać 8 jedynek. I mogę te jedynki wpisać do tablicy jedynie, jesli w tym miejscu tablicy jest liczba ujemna. Mam też zwrócić indeks tablicy, pod którym wpisałem pierwszą jedynkę [liczbę], a jeśli się nie wpisać wszytskich 8 jedynek, mam zwrócić wartość ujemną.

Pierwszy sposób zrobiłem, mam problem teraz, jaki można wymyślić na to [inny] sposób, ale żeby robił to samo?

mój kod, wydaje mi sie, ze dziala ok

int wpiszCyfry(int ile, int jaka)
    {
        int licznik= 0;
        for (int i=0; i<=rozmiarTablicy-ile; i++)
        {
            licznik= 0;
            while (tablica[i]==  -99)
            {
                licznik++;
                i++;
                if (licznik == ile)
                {
                    for (int j=i-ile; j<i; j++)
                        tablica[j] = jaka;
                    return i-ile;
                }
            }
        }
        return -99;
    }

nikt nie wie? kurcze, ja mialem tylko ten 1 pomysl, nic mi innego do glowy nie przychodzi

0

Nie wiem czy o to Ci chodzi ale to działa na zasadzie:

  1. Sprawdzam czy w tablicy WSZYSTKIE liczby są ujemnymi, jeśli nie to zwracam -99;
  2. Jeśli wszystkie liczby są ujemne z powyższego warunku, to wpisuję do tablicy liczbę tyle razy ile wybrałem. (czyli indeks 1 liczby w tablicy to zawsze 0);

Zrobiłem tak, ponieważ nie podałeś jakiej wielkości ma to być tablica więc założyłem, że jej wielkość jest taka jaka jest ilość liczb do wpisania w tablicę. Jeśli to rozw. jest złe to sformułuj inaczej treść zadania bo masakra.

int tab[8] = {-1,-1,-1,-1,-1,-1,-1,-1};

int wypiszCyfry(int ile, int jaka)
{
	for(int i = 0; i < ile; i++)
		if(tab[i] >= 0)
			return -99;
		else
			tab[i] = jaka;
	return 0; // indeks zawsze bedzie 0 w tym przypadku 
}
 
0

Nie, to raczej nie to. Dam przykład. Mam tablicę o wielkości 10. Chcę do niej wpisać 3 jedynki, ale tak, żeby te jedynki były jedna za drugą, żeby nie było między nimi innych liczb. a liczbę do tablicy mogę wpisac, tylko jeśli w komórce tablicy mam liczbę ujemną.Np

moja tablica: -99, 4, 5, 6, 1023, -99, -99, -99, 3, 86
moje trzy jedynki mogę wpisać tu: -99, 4, 5, 6, 1023, 1, 1, 1, 3, 86

i muszę zwrócić indeks z pod którego się zaczynają moje wpisane jedynki, gdzie je wpisałem

czyli tutaj zwróci 5

0

jesli chodzi Ci o ten przykład ja bym zrobił to tak

	int tab[] = {-99, 4, 5, 6, 1023, -99, -99, -99, 3, 86};//tablica 10 elementowa
	
	for(int i=0; i<10-3; i++)// kręcisz o 3 mniej (bo tyle chciałeś zamienić) żeby nie wyszło Ci poza rozmiar tablicy
		if(tab[i]<0 && tab[i+1]<0 && tab[i+2]<0){// jeśli kolejne 3 elementy są mniejsze od 0
			tab[i] = 1;
			tab[i+1] = 1;
			tab[i+2] = 1;
		}

	return 0;
 

edit:
zmienna i zawiera index gdzie zaczynałeś wpisywać, to jest dla szczególnego przypadku jeśli chcesz to uogólnić, żeby np musiało być więcej liczb spełniających jakieś kryterium to trochę musisz pozmieniać

0

no ok, ale ja nie wiem, ile jedynek czy tam innych cyfr ktos bedzie chcial wpisac, moze byc ich dowolna ilosc, a jak nie bedzie "miejsca" na wpisanie ich wszystkich, to ma tez zwrocic jakas wartosc ujemna

0

to w takim razie nie musisz robić na 3 tylko przypisz do zmiennej i nie rób takiego ifa jak ja tylko puść jeszcze jedną pętlę w tej pętli. Jak już faktycznie nie będziesz mógł napisać tego, to Ci napiszę, ale wolałbym żebyś pokombinował;)

0

buu i cos chyba zle, a z reszta nie potrafie jakos inaczej tego ujac i wychodzi kiszka, bo podobne do poprzedniego i w dodatku nie dziala :/

#include <iostream>
using namespace std;

int main()
{

    int tab[] = {-99, 4, 5, 6, 1023, -99, -99, -99, 3, 86};
    int rozmiar = 10;
    int ile = 3;
    int jaka = 1;
    int dlugosc = 0;

        for(int i=0; i<rozmiar - ile; i++)
        {
            for(int j=0; j<ile; j++)
            {
                if(tab[j] < 0)
                    dlugosc += 1;
                if(dlugosc == ile)
                {
                    int k ;
                    for(k=j; k<ile; k++)
                    {

                        tab[k] = 1;
                    }
                    cout << "Poczatek: " << k << endl;
                }
            }
        }

    for(int i=0; i<rozmiar; i++)
    {
        cout << tab[i] <<  " ";

    }

    return 0;
}
0

Nie zrozumiałem dokładnie zadania, ale 3 metody na zapełnienie tablic

  • wskaźnik
  • referencja
  • funkcje

przez referencje nie ma sensu, no ale trzeba jakoś wymyślić to +1. Tak na prawdę każde przypisanie wartości działa chyba jak przez wskaźnik?

#include <iostream>
#include <conio.h>

using namespace std;

// Co najmniej 2 sposobami wpisać do tablicy określoną ilość cyfr.

void by_ref(int (&array)[10], int numbers)
{
    for (int i=0; i<numbers; i++)
            *(array + i) = 1;
}

void by_ptr(int *array, int numbers)
{
    for (int i=0; i<numbers; i++)
        *(array + i) = 2;
}

int by_func(int array[], int numbers)
{
    for (int i=0; i<numbers; i++)
        array[i] = 3;

    return *array;
}

int main()
{
    const int N=10;
    int tablica[N];

    by_ref(tablica, 5);
        cout << tablica[2] << endl;

    by_ptr(tablica, 5);
        cout << tablica[2] << endl;

    by_func(tablica, 5);
        cout << tablica[2] << endl;

    getch();

    return 0;
}
 

Przerobiłem kod, może o to Ci chodziło?

#include <iostream>
using namespace std;

int main()
{

    int tab[] = {-99, 4, 5, 6, 1023, -99, -99, -99, 3, 86};
    int rozmiar = 10;
    int ile_jedynek = 7;
    int index_pierwszej_jedynki=-1; // <0

    for (int i=0; i<ile_jedynek; i++)
    {
        if(tab[i]>0)
        {
            tab[i]=1;
                if(index_pierwszej_jedynki < 0)
                    index_pierwszej_jedynki=i;
        }
    }

    if(index_pierwszej_jedynki < 0)
        cout << "Zadna zmiana nie zostala wprowadzona" << endl;

    for(int i=0; i<rozmiar; i++)
        cout << "tab[" << i << "]=" << tab[i] << ";\n";

    return 0;
}

Edit: Aha już wiem o co chodzi, zaraz będzie :]

0

ja bym to zrobił tak, powinno działać (nie testowałem), a jak nie to poprawki jakieś niewielkie

 #include <iostream>
using namespace std;
 
int main()
{
 
    int tab[] = {-99, 4, 5, 6, 1023, -99, -99, -99, 3, 86};
    int rozmiar = 10;
    int ile = 3;
    int jaka = 1;
    int dlugosc = 0;
	int j;
 
        for(int i=0; i<rozmiar - ile; i++)
        {
            for(j=0; j<ile && tab[i+j]<0; j++);
			if(j == ile)//jeśli linia wyżej znalazła odpowiednia ilość "miejsca", zwróć uwagę, że ta pętla nie ma 'ciała', ten if nie jest w forze który jest linie wyżej
			{
				for(j=0; j<ile; j++)
					tab[i+j] = jaka;
				cout << "poczatek: " << i << endl;
			}
            
        }
 
    for(int i=0; i<rozmiar; i++)
    {
        cout << tab[i] <<  " ";
 
    }
 
    return 0;
}

edit formatowanie się coś rozjechało, patrz komentarze

0

Zrobiłem

#include <iostream>
#include <conio.h>
using namespace std;

int znajdz_rejon(int tablica[], int rozmiar, int pole)
{
    int combo = 0; // :P

    for (int i=0; i<rozmiar; i++)
    {
        if (tablica[i] > 0)
        {
            combo++;
                if (combo == pole)
                    return (i-pole)+1;
        }
        else
            combo = 0;
    }

    return -1;
}

int main()
{

    int tab[] = {-99, -4, 5, 6, -1023, -99, 99, 99, 3, 86};
    int rozmiar=10;
    int miejsca=4; // szukane miejsca sasiednie w tablicy

    int rozeznanie = znajdz_rejon(tab, rozmiar, miejsca); // zwraca indeks, JEZELI jest miejsce na dane pole liczb

    if(rozeznanie > -1)
        for (int i=0; i<rozmiar; i++)
            if(tab[i]>0) tab[i] = 1;

    for (int i=0; i<rozmiar; i++)
            cout << i << ". " << tab[i] << endl;

    cout << "Index poczatkowy: " << rozeznanie << endl;

    getch();
    return 0;
}
0

@porschelukas: chyba bedzie dobrze, ale dalbym jeszcze break po cout << "poczatek: " << i << endl;

@Hell4Ge: nie, nie, nie, to nie to. zupelnie nie rozumiem tego co napisales.

nie mam jako takiej treści, kolega mi podpowiada ze to ma dzialac mniej wiecej jak taki ram

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