Showing posts with label arrays. Show all posts
Showing posts with label arrays. Show all posts

Tuesday, February 25, 2025

How to Use Derived Data Types in C Programming Language for Efficient Programming

In the C programming language, in addition to basic data types such as int, float, char, and double, there are derived data types that are based on basic types, but offer additional capabilities and flexibility when working with data. Derived data types are types that extend the functionality of primitive types by combining or referencing existing data. They allow the programmer to efficiently manage memory, group data, or define operations. Unlike primitive types, which directly store values, derived types often involve indirection, such as pointers, or the organization of multiple elements, such as arrays.

The main derived data types in the C language are:

Pointers: A data type that stores a memory address, e.g., int*, char* 
 
Arrays: A collection of elements of the same type, e.g., int arr [10]
 
Functions: The return value type of a function, e.g., int function ())

As you can see, in the C programming language, the main derived data types are pointers, arrays, and functions, and user-defined types such as struct, union, and enum are often implicitly included in this category, although they are formally different. We will write about user-defined types in the next blog post. Now we will concentrate only on derived data types that are not user-defined. If you are wondering how functions are a derived data type, then you simply need to know that functions in the C programming language have a type defined by their return value. They are not variables in the classical sense, but they are considered derived types because they allow defining operations on data. We hope this has cleared up any confusion. If anything is unclear, ask in the comments or contact us personally via the contact form on our blog.

A software engineer is considering using derived data types in the C programming language.

A software engineer is considering using derived data types in the C programming language

Pointers are one of the most powerful and characteristic aspects of the C language. They store the address in memory where the data is located, instead of the value itself. This allows for indirect access to data and dynamic memory allocation. Pointers in the C programming language are one of the key elements that make C so flexible and close to hardware. They are both fascinating and challenging, as they allow direct manipulation of memory, but their proper use can significantly improve program performance, while careless handling can lead to problems such as memory leaks and default errors. With pointers, you must code carefully and think carefully about when and how to use them.

Pointer Declaration:

int *ptr;

This means that ptr is a pointer to an integer value, int type specifies the type of data the pointer points to e.g., int, float, char, while * indicates that this is a pointer.

Key Operators:

& Address-of Operator - Retrieves the memory address of a variable.

* Dereference Operator - Accesses or modifies the value at the address stored in the pointer.

          Initialization Example:

int number = 10;

int *ptr = &number; // ptr points to the address of the number variable

Pointer Dereferencing:

    printf("Value at address: %d\n", *ptr); // Prints 10 

Dereferencing means accessing the value at the address that the pointer points to. Arrays in the C programming language are actually pointers to the first element. You can use them to traverse the array. Pointers can be used to pass arguments to functions to allow modifications of the original values. Function pointers allow functions to be called dynamically, based on their address. A pointer can also point to another pointer, allowing multiple levels of indirection. In any case, you will master pointers most easily through practice and coding.

Understanding and Applying Pointers in a Practical Example in C Programming Language

Wednesday, October 16, 2024

Arrays in PHP Programming Language, A Comprehensive Guide for Developers

Arrays are one of the most important data structures in PHP. An array is a variable that can hold multiple values at once, unlike regular variables which can only hold one value. Arrays allow you to store multiple pieces of data under one name, and you can access these values using keys or indices. This makes arrays a fundamental data structure for organizing and managing data efficiently. No, arrays are not just replacements for multiple individual variables. They enable us to build intricate data structures and execute a wide range of operations on this data with great efficiency. No matter the complexity of your data, arrays provide versatile methods for accessing and manipulating it, all while maintaining exceptional speed.

Think of arrays as digital containers that can hold a wide range of data, from simple numbers and text to more complex structures. Whether you're building an online shopping cart, analyzing survey data, or developing a basic database, arrays offer the flexibility you need. Arrays follow the same naming conventions as variables. This means that sometimes it's not immediately obvious in your code whether you're working with a variable or an array. The key syntactic difference lies in how you access individual elements within an array. In this post, we'll delve deep into the different types of arrays in PHP, how to work with them, and their most common applications. You'll learn how to create, populate, sort, search, and manipulate arrays, as well as how to utilize various built-in PHP functions for array operations.

Multidimensional arrays in PHP can be complicated for beginners

Multidimensional arrays in PHP can be complicated for beginners

It's crucial to understand that there are three primary types of arrays in PHP, each serving a different purpose. Some are indexed numerically, while others use alphanumeric keys. What sets PHP arrays apart is the wide range of built-in functions available for tasks like sorting, adding, deleting, and iterating over elements. These functions simplify array manipulation, saving you time and effort. In the previous lesson, we covered loops, check here, which are often used in conjunction with arrays. We'll delve deeper into custom functions in a later post, but for now, we'll focus on using the built-in functions. For now, let's focus on using the built-in PHP functions to work with the three main types of arrays:

  • Indexed (numeric) arrays - These arrays use numeric indexes to store and access values. Indexes start from zero, and each element in the array has its own unique index.
  • Associative arrays - These arrays use keys, which are usually strings, to index elements. Instead of numeric indexes, you can use names or other text values as keys.
  • Multidimensional arrays - These arrays allow you to store arrays within other arrays, meaning you can work with arrays that have multiple levels.
Creating and Manipulating Indexed Arrays

Thursday, March 19, 2020

Nizovi u C# programskom jeziku


Već ste učili kako se deklarišu i prave promenjive i konstante i kako da iste mogu da budu različitih tipova podataka. Ukoliko se ne sećate baš najbolje te teme, možete se podsetiti na ovom postu. Znači promenjive i konstante su odlične kada imate potrebu za manje podataka, ali šta da radite ako vam na primer treba 1000 promenjivih ili čak da vi ne znate koliko će vam tačno biti potrebno promenjivih? Nećete valjda deklarisati 1000 promenjivih, na šta bi taj vaš kod ličio? Zbog takvih situacija u C# programskom jeziku ali definitivno i u svim drugim programskim jezicima postoji nešto što zovemo nizovi. U informatičkoj literaturi piše da je Array – niz fiksan broj promenjivih koje zovemo elementi. To bi se tako moglo reći samo kad je niz definisan određenim brojem elemenata. Ako mene pitate, najjednostavnije rečeno, niz vam je indeksiran skup podataka istog tipa. Sintakse nizova u C# programskom jeziku su sledeće:

Jednodimenzionalan niz:
tip [] naziv_niza;

Dvodimenzionalni niz:
tip [ , ] naziv_niza;

Višedimenzionalan niz:
tip [ , , … ] naziv_niza;

Ortogonalni niz:
tip [ ] [ ] naziv_niza:
     

Nizovi nisu ograničeni samo na osnovne tipove podataka nego se mogu deklarisati i kao klase, strukture, numeracije ili neki tip podataka kojeg ste sami napravili. Broj elemenata koji može biti u nizu zavisi od vašeg procesora ali i operativnog sistema. Negde oko 4 biliona, ali imajte u vidu da Linux operativni sistem to više ograničava nego Windows 10 operativni sistem. Moj savet vam je da nikad ne pravite tako velike nizove gde se to može izbeći. Bolje napraviti više nizova.  


( Nizovi u C# programskom jeziku prikazani mapom uma )

Ukoliko ste vi neko ko poznaje C++ programski jezik, treba da imate na umu da i pored iste svrhe nizovi u C# programskom jeziku nisu isto što i nizovi u C++ programskom jeziku, niti je njihova deklaracija ista. Ukoliko vas interesuje na koji način funkcionišu nizovi u C++ programskom jeziku pogledajte ovde. Vi što ste nekada učili Visual Basic programski jezik, sećate se da je niz predstavljao promenjiva tipa SAFEARRAY, što znači da je rad sa nizom podrazumevalo izvesno angažovanje sistema, ali je olakšavao rad sa nizovima. I ono je bolje nego što su to nizovi u C i C++  programskim jezicima. Jednostavno, C# programski jezik je prevazišao neke nedostatke koje nizovi imaju i sada nizove tretira kao svaki objekat sa vlastitim metodama i svojstvima što vama olakšava rad sa nizovima. C# programski jezik podržava čak nizove u formi izričitog različitog tipa. Niz u C# programskom jeziku je sam po sebi referentni tip, čak i kad su njegovi elementi vrednosti tipovi. To znači da promenjiva niza ukazuje na neprekidan blok memorije koji sadrži elemente niza u hip memoriji kao što je to slučaj sa klasama. Međutim da sada ne bismo vas plašili i otišli previše daleko pogledajte praktičan primer kako se lako koriste nizovi.

Jednodimenzionalni nizovi

Tuesday, December 01, 2015

Nizovi u C# programskom jeziku


Najjednostavnije rečeno, niz vam je indeksiran skup podataka istog tipa. Indeks nizova uvek počinje od 0. Nizovi se dele na jednodimenzionalne i višedimenzionalne nizove. Kad pravite nizove u C# programskom jeziku, vama oni izgledaju slično kao u C ili C++ programskom jeziku ali oni to definitivno nisu. Nizove u C++ programskom jeziku možete pogledati ovde. U C i C++ programskom jeziku ime nekog niza samo predstavlja pokazivač memorijske adrese, dok indeks niza predstavlja samo relativnu poziciju navedene adrese. I pored toga što su nizovi u C i C++ programskom bili fleksibilni, lako su pravili greške jer nisu pratile veličinu niza što je dovodilo i do oštećenja podataka. U programskom jeziku Visual Basic, niz je čak u osnovi predstavljao promenjivu tipa SAFEARRAY, što znači da rad sa nizom je podrazumevao izvesno angažovanje sistema ali zato je olakšavao rad sa nizovima. I ono je bilo bolje nego nizovi u C i C++ programskom jeziku. Zato je C# prevazišao nedostatke programskog jezika C i C++ i nizove od starta tretira kao objekte sa metodama i svojstvima uključujući i granice. Ali i na taj način opet podržava nizove u formi izričitog različitog tipa.


( Nizovi u C# programskom jeziku prikazani mapom uma )

Za razliku od nizova u C i C++ programskom jeziku, u C# programskom jeziku prilikom deklarisanja niza se u pozadini pravi primerak .NET bazne klase System.Array. Znači, C# kompajler vaš kod prevodi u razne pozive metoda klase System.Array i zbog toga nizovi u C# programskom jeziku imaju neke dodatne funkcije koje u drugim navedenim jezicima nisu postojale. Sintaksa niza u C# je sledeća:

Jednodimenzionalan niz:
tip [] naziv_niza;

Dvodimenzionalni niz:
tip [ , ] naziv_niza;

Višedimenzionalan niz:
tip [ , , … ] naziv_niza;

Ortogonalni niz:
tip [ ] [ ] naziv_niza:


Nemojte mešati nizove u C# programskom jeziku sa nizovima u C i C++ programskom jeziku.



int[] array; // it is not like as in C/C++ … int array[];

Rad sa jednodimenzionalnim nizom

Monday, October 05, 2015

Nizovi u C++ programskom jeziku


Najjednostavnije definisano; niz je niz promenjivih istog tipa koji se nalaze u memoriji. Možemo reći i da je niz kolekcija elemenata ili lokacija za smeštanje podataka istog tipa. Inače niz predstavlja proizvoljno veliku količinu podataka indeksiranih sa brojevima. Sa malo koda vi u suštini pravite strukture nizova podataka proizvoljnih dimenzija, zatim pomoću petlji možete efikasno da obrađujete strukture podataka. Nizovi skoro uvek idu zajedno sa petljama i zbog toga su veoma korisni. Međutim nizovi u C++ programskom jeziku nisu baš kao u C# programskom jeziku jer su nizovi u C# objekti i moraju se instancirati što nije slučaj u C++ programskom jeziku. C++ programski jezik nije garbage collected i upotreba ključne reči new zahteva ručno oslobađanje memorije. Ali sad da ne komplikujem nego da pojednostavimo.


( Arrays, jednodimenzionalni i dvodimenzionalni nizovi )

Nizovi se deklarišu prvo određivanjem tipa niza, zatim imenom niza i veličinom. Najjednostavnija sintaksa niza je:

tip ime_niza [veličina];

Takođe o nizovima treba da znate da u niz možete smestiti i stringove i objekte i druge nizove ali u svakom nizu može da postoji samo isti tipovi podataka. Npr. Ovako se definiše niz koji sadrži 10 promenjivih tipa integer.

int numbers[10];


Sad u niz numbers možete staviti 10 brojeva tipa integer umesto da pravite 10 promenjivih:

numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
numbers[5] = 6;
numbers[6] = 7;
numbers[7] = 8;
numbers[8] = 9;
numbers[9] = 10;

Međutim ovako dodeljivanje nema neke velike razlike u pisanju 10 promenjivih tipa integer sa dodeljenim vrednostima. Zato isti niz možemo napisati, deklarisati i dodeliti nizu vrednosti jednostavnije; u jednoj liniji koda pomoću agregata jednostavnom notacijom vitičasti zagrada i tačka zarezom. 

int numbers[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

Ovako u jednoj liniji koda vi vršite i pravilno inicijalizaciju. Inače bez inicijalizacije niza vaš program vam može praviti komplikacije; ukoliko niste deklarisani niz na globalnom nivou. C++ programski jezik na žalost automatski inicijalizuje promenjive i sve elemente niza nulom samo na globalnom nivou. Što u prevodu znači da promenjive i svi elementi deklarisani na lokalnom nivou sadrže slučajne vrednosti (smeće). Ovako kompajler može da obradi vaš niz kao da to nije ni bitno ali može i da vam napravi ogromne komplikacije.

Kako to misliš, da mogu imati komplikacije kad deklarišem niz bez inicijalizacije?