Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Podobne dokumenty
Języki i paradygmaty programowania 1 studia niestacjonarne 2018/19

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

Część 4 życie programu

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

x szereg(x)

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Tablice, funkcje - wprowadzenie

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Argumenty wywołania programu, operacje na plikach

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Lab 9 Podstawy Programowania

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

Język C, tablice i funkcje (laboratorium)

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int f(); //f - funkcja zwracająca wartość typu int int (*f)(); //f - wskaźnik do funkcji zwracającej wartość typu int

Techniki Programowania wskaźniki 2

Programowanie obiektowe W3

Alokacja pamięci dla tablicy dwuwymiarowej

I - Microsoft Visual Studio C++

Podział programu na moduły

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Język ANSI C tablice wielowymiarowe

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Wskaźniki. Programowanie Proceduralne 1

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Podstawy programowania komputerów

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 3 - sem.iii. Dr inż. M. Czyżak

tablica: dane_liczbowe

Wskaźniki. Informatyka

IX. Wskaźniki.(3 godz.)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Wstęp do Programowania, laboratorium 02

Funkcje. Wprowadzenie. Mirosław Ochodek

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Pobieranie argumentów wiersza polecenia

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania w języku C++

Zajęcia 6 wskaźniki i tablice dynamiczne

DYNAMICZNE PRZYDZIELANIE PAMIECI

Język C zajęcia nr 11. Funkcje

Stałe, tablice dynamiczne i wielowymiarowe

Wstęp do programowania

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie Proceduralne

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy i języki programowania

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Wprowadzenie do programowania i programowanie obiektowe

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Programowanie 3 - Funkcje, pliki i klasy

Uzupełnienie dot. przekazywania argumentów

Metody Metody, parametry, zwracanie wartości

Programowanie w Scilab

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Tablice, funkcje, wskaźniki - wprowadzenie

Stałe i zmienne znakowe. Stała znakowa: znak

Proste programy w C++ zadania

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zmienne i struktury dynamiczne

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Podstawy Programowania. Tablice i wskaźniki cd., argumenty wywołania programu, reguły stylu programowania, asercje

Co nie powinno być umieszczane w plikach nagłówkowych:

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

C++ wprowadzanie zmiennych

Transkrypt:

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach. 1. Dynamiczna alokacja pamięci dla tablic wielowymiarowych - Przykładowa tablica 10x5 o elementach typu double. Wersja 1. double **tab; int n = 10, m = 5; tab = (double **)malloc(sizeof(double *) * n); if (!tab) tab[i] = (double *)malloc(sizeof(double) * m); if (!tab[i]) if (tab) if (tab[i]) free(tab[i]); free(tab); tab = NULL; Wersja 2. double **tab_a, *tab_b; int n = 10, m = 5; tab_b = (double *)malloc(sizeof(double) * n * m ); if (!tab_b) tab_a = (double **)malloc(sizeof(double *) * n); if (!tab_a) tab_a[i] = &tab_b[ m * i ]; if (tab_b) free(tab_b); // free(tab_a[0]); tab_b = NULL; Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 1

if (tab_a) free(tab_a); tab_a = NULL; 2. Przykład. Napisz program, który dla danych dwóch macierzy: =, = 0,1,2,, 1; = 0,1,2,, 1, =, = 0,1,2,, 1; = 0,1,2,, 1 oraz wektora =, = 0,1,2,, 1, policzy: a) Sumę macierzy: = +,!" = + ; b) Iloczyn macierzy przez wektor #:! = ;! = '() %*+ % % ; = 0,1,2,, 1; Do kontroli poprawności obliczeń wykorzystaj funkcję error z pliku util_1.cpp (patrz lab. 8). Dane pobrać z pliku, wyniki zapisać do pliku, nazwy plików przekazać przez argumenty wywołania programu. //==============================PLIK_1=================================== #include "pch.h" #include<stdio.h> #include<stdlib.h> #include<string.h> #pragma warning(disable:4996) #define LL 20 FILE *fw, *fd; void argumenty(int, char **); extern void error(int, char *); int main(int argc, char *argv[]) double a[ll][ll], b[ll][ll], c[ll][ll], x[ll], y[ll], r; int i, j, k, n, m; argumenty(argc, argv); if (!(fd = fopen(argv[1], "r"))) error(2, "dane"); if (!(fw = fopen(argv[2], "w"))) error(2, "wyniki"); fscanf(fd, "%d %d", &n, &m); fscanf(fd, "%lf", &a[i][j]); for (i = 0; i < m; i++) fscanf(fd, "%lf", &x[i]); fscanf(fd, "%lf", &b[i][j]); c[i][j] = a[i][j] + b[i][j]; r = 0; for (k = 0; k < m; k++) r += a[i][k] * x[k]; Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 2

y[i] = r; fprintf(fw, "%lf ", c[i][j]); fprintf(fw, "\n"); fprintf(fw, "%lf ", y[i]); if (!((i + 1) % 5)) fprintf(fw, "\n"); system("pause"); return 0; void argumenty(int argc, char *argv[]) int len; char *usage; if (argc!= 3) len = strlen(argv[0]) + 19; if (!(usage = (char*)malloc((unsigned)len * sizeof(char)))) error(3, "tablica usage"); strcpy(usage, argv[0]); strcat(usage, " file_in file_out"); error(4, usage); /**************** plik util_1.cpp ******************************/ #include<stdio.h> #define MAX_ERR 5 static char *p[] = "", " zle dane", " otwarcie pliku", " brak pamieci", " Usage : ", " nieznany ", ; void error(int nr, char *str) int k; k = nr >= MAX_ERR? MAX_ERR : nr; fprintf(stderr, "Blad(%d) - %s %s\n", nr, p[k], str); system("pause"); exit(nr); 3. Zmodyfikuj program z powyższego przykładu tak aby: Zamiast tablic jednowymiarowych zdefiniować zmienne typu double *, zamiast tablic dwuwymiarowych zdefiniować zmienne typu double **; Zarezerwować dokładnie m miejsc na tablice jednowymiarowe typu double (alokacja pamięci), np.: x = (double*)malloc((unsigned)m * sizeof(double)); Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 3

Zarezerwować dokładnie n*m miejsc na tablice dwuwymiarowe typu double (alokacja pamięci patrz pkt.1), np.: a = (double**)malloc((unsigned)n * sizeof(double*)); a[i] = (double*)malloc((unsigned)m * sizeof(double)); 4. Algorytm z pkt.3 podziel na kilka funkcji: a) Alokacja pamięci (dwie funkcje - wer.1 i wer.2 patrz pkt.1) : double **DajMac_1(int n, int m) double **DajMac_2(int n, int m) b) Zwolnienie pamięci (dwie funkcje): void ZwrocMac_1(double **ma, int n, int m) void ZwrocMac_2(double **ma, int n, int m) c) Czytanie elementów tablicy o dwóch indeksach z pliku: void CzytMac(FILE *fd, double **ma, int n, int m) int i, j; char *err; if (fscanf(fd, "%lf", &ma[i][j])!= 1) printf("blad - element nr %d %d\n", i, j); d) Pisanie elementów tablicy o dwóch indeksach do pliku: void PiszMac(FILE *fw, double **ma, int n, int m) e) Dodawanie macierzy: void DodMac(double **ma1, double **ma2, double **ma3, int n, int m) f) Mnożenie macierzy przez wektor: void Mac_x_Wekt(double **ma, double *we, double *wy, int n, int m) g) Napisz dodatkowo funkcję, która dla danych macierzy:, =, = 0,1,2,, 1; = 0,1,2,, 1, - =!, = 0,1,2,, 1; = 0,1,2,,. 1 policzy macierz / =,- czyli '() = 0 %! %, = 0,1,2,, 1, = 0,1,2,. 1 %*+ void Mac_x_Mac(double **x, double **y, double **z, int n, int m, int p) Funkcje realizujące zadania a), b), c), d) zapisz w pliku util_4.cpp. Funkcje realizujące zadania e), f), g) zapisz w pliku util_5.cpp. 5. Zrealizuj zadania z powyższego przykładu (pkt.2 i następne) wykorzystując utworzone wcześniej funkcje zawarte w plikach util_2.cpp, util_3.cpp (lab. 8), util_4.cpp, util_5.cpp. Fragment programu: FILE *fw, *fd; extern void error(int, char*),piszwekt(file *, double *, int), CzytWekt(FILE *, double *, int),czytmac(file *, double **, int, int), PiszMac(FILE *, double **, int, int); extern double *DajWekt(int), **DajMac_1(int, int); extern void DodMac(double **, double **, double **, int, int), Mac_x_Wekt(double **, double *, double *, int, int); void argumenty(int argc, char *argv[]); Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 4

int main(int argc, char *argv[]) double *x, *y; double **a, **b, **c; int n, m; argumenty(argc, argv); if (!(fd = fopen(argv[1], "r"))) error(2, "dane"); if (!(fw = fopen(argv[2], "w"))) error(2, "wyniki"); fscanf(fd, "%d %d", &n, &m); x = DajWekt(m); y = DajWekt(m); a = DajMac_1(n, m); b = DajMac_1(n, m); c = DajMac_1(n, m); CzytMac(fd, a, n, m); CzytMac(fd, b, n, m); CzytWekt(fd, x, m); DodMac(a, b, c, n, m); Mac_x_Wekt(a, x, y, n, m); printf("macierz\n"); PiszMac(stdout, c, n, m); fprintf(fw, "Macierz\n"); PiszMac(fw, c, n, m); printf("wektor\n"); PiszWekt(stdout, y, n); fprintf(fw, "Wektor\n"); PiszWekt(fw, y, n); Pliki util_2.cpp i util_3.cpp dostępne pod adresem: http:/http://riad.pk.edu.pl/~jwojtas/jipp/util_2.pdf http:/http://riad.pk.edu.pl/~jwojtas/jipp/util_3.pdf 6. Dana jest macierz kwadratowa B[n][n]. Znaleźć sumę elementów leżących poniżej głównej przekątnej i jednocześnie należących do zadanego przedziału [a,b]. 7. Dana jest macierz kwadratowa B[n][n]. Znaleźć sumę tych elementów leżących na obu przekątnych macierzy, które jednocześnie spełniają warunek (na głównej przekątnej j=i, na drugiej j=n-i): 0 :" ;";;<ó>?łó>;.a ;Bą<; sin456567 9 0,5 :" ;";;<ó> :AE?;.A ;Bą<; *Treści oznaczone kursywą pochodzą z różnych źródeł internetowych. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 5