Plik a tablica dynamiczna
Kod był wyświetlany 2240 razy.
    /*
  Name: Plik a tablica dynamiczna
  Copyright: GPL GNU
  Date: 07-02-10 17:28
  Description:

  W pliku wejściowym znajduje się k liczb. Należy napisać program zliczający ile
  liczb zawiera plik, następnie utworzyć jednowymiarową tablicę dynamiczną T1 o
  rozmiarze k i do tej tablicy przepisać liczby z otwartego pliku.
  Utworzyć dwie nowe jednowymiarowe tablice dynamiczne T2, T3.
  Do tablicy T2 program ma przepisać wszystkie liczby parzyste znajdujące się w tablicy 
  T1, natomiast do tablicy T3 - wszystkie liczby nieparzyste z tablicy T1
*/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void stoj()
{getchar();getchar();}

int main()
{
    FILE *plik;
    char nazwa[128],o;
    int k=0,i,p=0,n=0,j,l;
    int *T1,*T2,*T3;

    printf("\n\n\tPodaj nazwe pliku do odczytania: ");
    scanf("%128s",&nazwa);

    plik=fopen(nazwa,"r");
    if(plik==0)
    {
             printf("\n\tNie zdolalem otworzyc pliku.");
             stoj();
             return 0;
             }
    printf("\n\tOtworzylem plik.");

    while(fscanf(plik,"%d",&l)!=EOF) // zliczenie ile liczb znajduje sie w pliku
    k++;

    printf("\n\tPlik zawiera %d liczb.",k);

    T1=(int*)malloc(sizeof(int)*k);
    if(T1==0)
    {
           printf("\n\tBlad alokacji pamieci.");
           stoj();
           return 0;
           }
    printf("\n\tZajalem pamiec dla tablicy T1.");
    stoj();

    rewind(plik); // przejscie od nowa na poczatek pliku

    i=0;
    while(fscanf(plik,"%d",&T1[i])!=EOF) // przepisanie kolejnych licz z pliku
    {                                    // do T1
        if(T1[i]%2==0)                 // sprawdzenie, ile bedzie parzystych
        p++;
        else                             // i ile nieparzystych
        n++;
        i++;
        }
    printf("\n\tWczytalem zawartosc pliku do T1.");
    fclose(plik);                        // zamkniecie pliku
    printf("\n\tZamknalem plik.");

    T2=(int*)malloc(sizeof(int)*p);      // zajecie pamieci na liczby parzyste
    T3=(int*)malloc(sizeof(int)*n);      // j.w. dla nieparzystych
    if(T2==0||T3==0)
    {
           printf("\n\tBlad alokacji pamieci.");
           stoj();
           return 0;
           }
    printf("\n\tZajalem pamiec dla tablic T2 i T3.");

    j=0;l=0;
    for(i=0;i<k;i++)                      // przepisanie elementow z T1
    {
            if(T1[i]%2==0)                // jesli parzyste
            T2[j++]=T1[i];                // to do T2
            else                          // jesli nie
            T3[l++]=T1[i];                // to do T3
            }

    getchar();
    do
    {
        printf("\n\tGotowe. Wypisac elementy? [T/N]: ");
        scanf("%c",&o);
        o=toupper(o);
        }
    while(o!='T'&&o!='N');

    if(o=='T')
    {
        printf("\n\tZawartosc T2 (parzyste):\n\t");
        for(i=0;i<p;i++)
        printf("%d\t",T2[i]);
        printf("\n\n\tZawartosc T3 (nieparzyste):\n\t");
        for(i=0;i<n;i++)
        printf("%d\t",T3[i]);
        }

    stoj();
    return 0;
}    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT