1 Востаннє редагувалося adamans (02.01.2013 12:15:56)

Тема: Допомога з рішенням задачі на С. Видалення елементу масиву*

Дано одновимірний масив С, який складається з 12 елементів. Вилучити з масиву k-й елемент масиву (k<12).

#include <stdio.h>
#include <math.h>
#include <conio.h>
int main(void)
{
  float c[12]={0,1,2,3,4,5,6,7,8,9,10,11}, b[11];
  int k,i,j=0;
  puts("vvedit k");
  scanf("%d", &k);

  if  (k<0 || k>11)
  printf("vvedit 0<k<11\n");
  else (k>0 || k<11);

  for (i=0; i<12; i++)
{
  printf("%.0f ", c[i]);
  if(i==k) continue;
  b[j]=c[i];
  j++;
}
  printf("\n");
  for (i=0; i<11; i++)
{
  printf("%.0f ", b[i]);
} 
  printf("\n");
  getch();
  return (0);
}

Треба треба переробити під функцію malloc.
Ось код, видає помилку!

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
  float c[12]={0,1,2,3,4,5,6,7,8,9,10,11}, b[11];
  int k,i,j=0,*d;
  clrscr();
  puts("vvedit k");
  scanf("%d", &k);

  d=malloc(k*sizeof(int)); 
  printf("adres masivu=%p\n",d);

  if  (k<0 || k>11)
  printf("vvedit k<11");

  else (k>0 || k<11);
  for (i=0; i<12; i++)
{
  printf("c=%.0f adres%p\n", *(d+i));
  if(i==k) continue;
  *(b+j)=*(d+i);
  j++;
}
  printf("\n");
  for (i=0; i<11; i++)
{ 
  printf("b=%.0f adres=%p\n", b[j]);
}
  printf("\n");
  getch();
  free(d);
  return (0);
}

ДЯКУЮ!

Подякували: Lata2

2

Re: Допомога з рішенням задачі на С. Видалення елементу масиву*

Дякую, що прислухалися до зауважень щодо оформлення коду - плюс вам у карму.:)

Щодо помилки:

d=(int*)malloc(k*sizeof(int)); 

Справа у тім, що malloc() поверне вам просто покажчик на якусь область пам'яті заданого розміру (читайте: купу). А от як ви цю пам'ять збираєтеся використати надалі, вказується явним зведенням типу (у вашому випадку з числами - покажчик на числа, себто int*).

3 Востаннє редагувалося adamans (03.01.2013 01:11:08)

Re: Допомога з рішенням задачі на С. Видалення елементу масиву*

Знову видає помилки! Цю задачу можна реалізувати взагалі?

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
int *c[12], *b[11];
int k,i,j=0;
c=(int*)malloc(100*sizeof (int));
b=(int*)malloc(100*sizeof (int));
printf("Address masivu=%p\n",c);
puts("vvedit k");
scanf("%d", &k);
if  (k<0 || k>11)
printf("vvedit 0<k<11\n");
else (k>0 || k<11);
for (i=0; i<12; i++)
{
 printf("%.0f ", *(c+i),c);
 if(i==k) continue;
 *b[j]=*c[i];
 j++;
}
printf("\n");
for (i=0; i<11; i++)
{
printf("%.0f ", *(b+i),b);
}
printf("\n");
free(c);
free(b);
getch();
return (0);
}
Подякували: Lata1

4

Re: Допомога з рішенням задачі на С. Видалення елементу масиву*

adamans написав:

Знову видає помилки! Цю задачу можна реалізувати взагалі?

І не дивно. Що, наприклад, ви розумієте під оголошенням

int *c[12], *b[11];

?

По факту кожен із них - масив покажчиків на int, а не покажчик на масив. Аналогію згадайте у прозаїчному

int main(int argc, char* argv[])

, який характеризує ваш код для випадку з типом char і являє собою масив текстових рядків змінної довжини (по суті, покажчик типу char**).

От вам для роздумів приклад роботи з malloc.

int *myArr = (int*)malloc(100*sizeof(int));

for(int i=0;i<100;i++)
    myArr[i]=0;


if(myArr)
    free(myArr);

Імовірно, вам варто ще раз розібратися з поняттям динамічної пам'яті та роботи з нею.