Witam!
Jako że są to moje pierwsze kroki w tym języku, proszę o pomoc.
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
void reverse(int *tab, int size ){
int b=0,tmp;
size=size-1;
while(size>=b){
tmp=tab[size];
tab[size]=tab[b];
tab[b]=tmp;
size=size-1;
b=b+1;
}
}
void prepare(char **words, int size){
int x,y,a;
int dlugosc_wyrazu[size];
int min;/*indeks przy sprawdzaniu który najkrótszy wyraz*/
for(y=0;y<size;y++){
for(x=0;x<25;x++){
if (words[y][x]=='\0'){
break;
}
dlugosc_wyrazu[y]=x+1;
}
}
/*przejażdza cała tablice znajduje najwiekszy wciska go pod 1 elm*/
/*
char *tmp;
int dl_tmp;
int zmiana;
tmp=malloc(sizeof(char)*1);
min=0;
for(x=0;x<size;x++){
for(y=x;y<size;y++){
if(dlugosc_wyrazu[y]<dlugosc_wyrazu[min]){
min=y;
zmiana=1;
}
else{
zmiana=0;
}
}
printf("%d\n",min);
if (zmiana==1){
tmp=realloc(tmp,sizeof(char)*dlugosc_wyrazu[x]+1);
for(a=0;a<dlugosc_wyrazu[x];a++){
tmp[a]=words[x][a];
}
words[x] = realloc(words[x],sizeof(char)*dlugosc_wyrazu[min]+1);
for(a=0;a<dlugosc_wyrazu[min]+1;a++){
words[x][a]=words[min][a];
}
words[min] = realloc(words[min], sizeof(char)*dlugosc_wyrazu[x]+1);
for(a=0;a<dlugosc_wyrazu[min]+1;a++){
words[min][a]=tmp[a];
}
dl_tmp=dlugosc_wyrazu[x];
dlugosc_wyrazu[x]=dlugosc_wyrazu[min];
dlugosc_wyrazu[min]=dl_tmp;
}
min++;
}
*/
/*szukam najkrótszego*/
min=0;
int tmp;
for(a=0;a<size-1;a++){
if(dlugosc_wyrazu[a]>dlugosc_wyrazu[a+1]){
min=a+1;
}
}
if(min!=0){
tmp=*words[0];
*words[0]=*words[min];
*words[min]=tmp;
}
/*Wyświetl*/
printf("Uporządkowane wyrazy :)\n");
for(x=0;x<size;x++){
for(y=0;y<dlugosc_wyrazu[x];y++){
printf("%c",words[x][y]);
}
printf("\n");
}
}
int main(int argc, char **argv) {
int size;
size=atoi(argv[1]);
int *tab;
tab=malloc(sizeof(int)* size);
int a,wylosowana;
srand(time(0));
for(a=0;a<size;a++){
wylosowana = 0 + rand() % 100;
tab[a]=wylosowana;
}
printf("Przed działaniem funkcji!\n");
for(a=0;a<size;a++){
printf("Element nr. %d to liczba: %d \n",a,tab[a]);
}
printf("\n");
reverse(tab,size);
printf("Po działaniu funkcji!\n");
for(a=0;a<size;a++){
printf("Element nr. %d to liczba: %d \n",a,tab[a]);
}
free(tab);
/*
tablica charów :P
*/
int l;
char wyraz[25];
int dlugosc;
char **words;
words=malloc(size);
for(a=0;a<size;a++){
printf("\nPodaj wyraz: \n");
gets(wyraz);
dlugosc=strlen(wyraz);
words[a]=malloc(sizeof(char)*dlugosc);
for(l=0;l<dlugosc;l++){
words[a][l]=wyraz[l];
}
}
prepare(words,size);
return (EXIT_SUCCESS);
}
Treść
1.
Program losuje tablicę N liczb. Utworzyć funkcję, która przyjmuje jako parametr tablicę i jej rozmiar.
Funkcja odwraca kolejność elementów tablicy:
void reverse(int array[], int size);
Program powinien wypisać zawartość tablicy na ekran przed i po działaniu funkcji.
Program wczytuje od użytkownika N słów (char*). Utworzyć funkcję, która przyjmuje jako parametr
tablicę słów i jej długość. Funkcja układa słowa od najkrótszego do najdłuższego.
void prepare(char** words, int size);
Pierwszy program myśle że jest ok.
W drugim problem prawdopodobnie tkwi w tworzeniu macierzy charów, alokacji pamięci.
Znając długości danych wyrazów. Chciałbym za pomocą przepisania wskaźników aby wskazywały na dane wyrazy w odpowiedniej kolejności.
Przepraszam za mało czytelny kod.
Za każdą pomoc z góry dziękuję.
Pozdrawiam