Alokacja pamieci i wskaźniki [C]

s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

Alokacja pamieci i wskaźniki [C]

Post autor: s3ba »

Mam takie 3 zadanka:
1. Napisać program wyszukujący w tablicy liczb typu int wartość min i max przy użyciu wskaźnika.
2. Utworzyć zmienne dynamiczne typu char, int i double, następnie wczytać i wydrukować.
3. Alokować pamięć dla 10-elementowych tablic tab1 i tab2 liczb typu int, wczytać tablicę i posortować tab1 niemalejąco przy zastosowaniu algorytmu sortowania bąbelkowego oraz tab2 stosując algorytm prostego wybierania.

Chciałbym aby ktoś sprawdził moje dotychczasowe męki i powiedział czy te zadania są dobrze napisane i wskazał błedy, ewentualnie je poprawił. Byłbym niezmiernie wdzięczny za pomoc. Pierwsze 2 programy działają po skompilowaniu tylko nie wiem czy tak mają wyglądać (dopiero zaczynam zabawe ze wskaźnikami) w 3 brakuje sortowań (też nie jestem pewien czy początek mam dobrze).

Zad.1

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
#define Z 5
int main(){    
	int tab[Z],*pz=tab,i,max,min;
	
	printf("
Wczytanie tablicy:
");
	for(i=0;i<Z;i++)
	{
	 	printf("
Element[%d]=",i);
	 	scanf("%d",pz++);
	}
					
	pz=pz-5;
	max=min=*pz;
	
	for (pz=tab; pz<&tab[Z]; pz++)
          {
                 if (*pz>max)
                 max=*pz;
                 if (*pz<min)
                 min=*pz;
          }
               
    printf("
Wartosc maksymalna tablicy: %d",max);
    printf("
Wartosc minimalna tablicy: %d",min);
   				
	getch();
    return 0;
}
Zad.2

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(){    
	int *px;
	char *pc;
	double *py;
	
	py=(double*)malloc(sizeof(double));
	pc=(char*)malloc(sizeof(char));
	px=(int*)malloc(sizeof(int));
	
	
	printf("int x:");
	scanf("%d",px);
	fflush(stdin);
	
	printf("char c:");
	scanf("%c",pc);
	fflush(stdin);
	
	printf("double y:");
	scanf("%lf",py);
	fflush(stdin);
	
	printf("
x=%d	c=%c	d=%lf",*px,*pc,*py);
	
	getch();
    return 0;
}
Zad.3

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Z 10
int main(){
	int *ptab1,*ptab2,i;
	
	ptab1=calloc(10,sizeof(int));
	if (ptab1==NULL)
	{
           printf("
Alokacja nie powiodla sie");
           getch();
           return 0;
    }
	ptab2=calloc(10,sizeof(int));
	if (ptab2==NULL)
	{
           printf("
Alokacja nie powiodla sie");
           getch();
           return 0;
    }
	
	printf("
Wczytanie tablicy tab1:
");
	for(i=0;i<Z;i++)
	{
	 				printf("
Element[%d]=",i);
	 				scanf("%d",ptab1++);
	 				fflush(stdin);
					}
					ptab1=ptab1-10;
					
	printf("
Wczytanie tablicy tab2:
");
	for(i=0;i<Z;i++)
	{
	 				printf("
Element[%d]=",i);
	 				scanf("%d",ptab2++);
	 				fflush(stdin);
					}					
					ptab2=ptab2-10;				
	getch();
    return 0;
}
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Alokacja pamieci i wskaźniki [C]

Post autor: spajder »

1. Wygląda na działający, żeby trzymać się konwencji wskaźników to zamiast:

Kod: Zaznacz cały

 for (pz=tab; pz<&tab[Z]; pz++)
dałbym:

Kod: Zaznacz cały

 for (pz=tab; pz<tab + Z; pz++)
do tego obowiązkowo zamiast:

Kod: Zaznacz cały

 pz=pz-5;
daj jedno z dwóch:

Kod: Zaznacz cały

pz=tab;
pz -= Z;
bo skoro wszędzie korzystasz z tablicy rozmiaru Z, to szkoda tutaj to psuć i wymagać, by tablica miała 5 elementów.

2. zwolnij pamięć (za pomocą free) na końcu programu

3. Albo wywal definicję Z, albo z niej korzystaj. Też będziesz musiał zwalniać pamięć.
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

Alokacja pamieci i wskaźniki [C]

Post autor: s3ba »

Dzięki wielkie
2. Wystarczą tylko te 3 linjki?

Kod: Zaznacz cały

   free(px);
	free(pc);
	free(py);
3.Sortowanie tych tablic musze przeprowadzić za pomocą wskaźników, tak?
Nie za bardzo wiem jak ma to wyglądać.
Byłbym wdzięczny gdyby ktoś pokazał mi (napisał kod) jednego z tych sortowań, z drugim bym sobie wtedy już sam poradził.
ODPOWIEDZ