Mam stworzyć program na bazie tego programu poniżej
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 10
int r1,r2; // Wymiary tablicy: (r1) x (r2)
void error(char *tekst)
{
printf("\n%s!!!!!!!!!!!!",tekst);
getch();
}
void tablica_jednowymiarowa(void)
{
char *poletko_robocze;
clrscr();
printf("\nZakladanie tablicy jednowymiarowej.");
printf("\nPodaj rozmiar bufora: ");
scanf("%d",&r2);
poletko_robocze = new char[r2];
if(!poletko_robocze)
{
error("Brak pamieci");
return;
}
printf("Wprowadz tekst: ");
scanf("%s",poletko_robocze); // drugi argument: char*
if(strlen(poletko_robocze)>r2)
{
error("Przekroczony rozmiar bufora");
error("Ciekawe jak to sie skonczy? ");
delete(poletko_robocze); // zwalniamy pamiec - tu latwo ZAPOMNIEC
return;
}
printf("Test: %s",poletko_robocze);
getch();
delete(poletko_robocze);
}
void tablica_dwuwymiarowa(void) // liczba wierszy ograniczona od gory: N
{
char *poletko_robocze[N];
int i;
clrscr();
printf("\nZakladanie tablicy dwuwymiarowej.");
printf("\nPodaj liczbe buforow (nie wieksza od %d): ",N);
scanf("%d",&r1);
printf("Podaj rozmiar pojedynczego bufora: ");
scanf("%d",&r2);
for(i=0;i<r1;i++) // petla od 0 do r1
{
poletko_robocze[i] = new char[r2]; // rezerwacja pamieci
if(!poletko_robocze[i]) // test
{
error("Brak pamieci"); // Trzeba zwolnic!!!
return; // STRASZNY BLAD!!!!
}
printf("Wprowadz tekst nr %d: ",i);
scanf("%s",poletko_robocze[i]); // drugi argument!!
}
printf("\nTest:");
for(i=0;i<r1;i++) // petla od 0 do r1
printf("\n\t tekst %d: %s",i,poletko_robocze[i]);
getch();
for(i=0;i<r1;i++) // petla od 0 do r1
delete(poletko_robocze[i]);
printf("\nTablica adresow jest zmienna automatyczna - zwolni sie sama!!");
getch();
}
void pelne_szalenstwo(void) // zakladamy wpierw tablice adresow
{
char **poletko_robocze; // tu jest roznica
int i;
clrscr();
printf("\nZakladanie tablicy dwuwymiarowej.");
printf("\nPodaj liczbe buforow (nie wieksza od %d): ",N);
scanf("%d",&r1);
printf("Podaj rozmiar pojedynczego bufora: ");
scanf("%d",&r2);
poletko_robocze = new char *[r1]; // CO$ NOWEGO!!!
for(i=0;i<r1;i++)
{
poletko_robocze[i] = new char[r2];
if(!poletko_robocze[i])
{
error("Brak pamieci");
return; // STRASZNIEJSZY BLAD!!!!
}
printf("Wprowadz tekst nr %d: ",i);
scanf("%s",poletko_robocze[i]);
}
printf("\nTest:");
for(i=0;i<r1;i++)
printf("\n\t tekst %d: %s",i,poletko_robocze[i]);
getch();
for(i=0;i<r1;i++)
delete(poletko_robocze[i]);
printf("\nTablice adresow trzeba zwolnic wlasnymi lapkami!!");
delete(poletko_robocze); // ZWALNIANIE TABLICY ADRESOW
getch();
}
void menu(void)
{
clrscr();
printf("\nMenu:");
printf("\n\n\t1: Zakladanie tablicy jednowymiarowej");
printf("\n\t2: Zakladanie tablicy dwuwymiarowej");
printf("\n\t3: Pelne szalenstwo");
printf("\n\tEsc: Koniec");
}
void main(void)
{
char pytanie;
while(1)
{
menu();
pytanie=getch();
switch(pytanie)
{
case '1':
tablica_jednowymiarowa();
break;
case '2':
tablica_dwuwymiarowa();
break;
case '3':
pelne_szalenstwo();
break;
case 27:
return;
}
}
}