Форум: Форум C++Разное
Новые темы: 00
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Использование calloc()
 
 автор: kakalukia   (28.10.2008 в 02:25)   письмо автору
 
 

SOS!!!!
Написать функцию, решающую указанную ниже задачу. Массив создается в динамической области памяти стандартной функцией calloc(). При обращении к элементам массива воспользоваться взаимосвязью массивов с указателями (косвенная адресация)
сумму элементов массива, расположенных после первого положительного элемента.

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 03:45)   письмо автору
 
   для: kakalukia   (28.10.2008 в 02:25)
 

Пока решил данную задачу на C++, т.е. при помощи new и delete...

#include "stdafx.h"
#include <conio.h>
#include <iostream>

using namespace std;

void main (void)
{
bool flag=false;
int count=10,sum=0;
cout<<"Enter count of ellements: ";
cin>>count;
int* myArr=new int[count];
for(int i=0;i<count;i++)
{
cout<<"Enter "<<i+1<<" ellement of array: ";
cin>>*(myArr+i);
}

cout<<"Array: ";
for(int i=0;i<count;i++)
{
cout<<" "<<*(myArr+i)<<" ";
if(flag==true)
sum+=*(myArr+i);
else if(*(myArr+i)>0)
{
flag=true;
}
}
cout<<endl<<"Sum of ellements: "<<sum<<endl;

getch();
delete [] myArr;
}

Если будет время, то попробую перевести на C :)
Прога написана на Visual Studio 2008 C++ xD GL

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 03:50)   письмо автору
 
   для: kakalukia   (28.10.2008 в 02:25)
 

Вот в первом приближении... Точно не уверен что все так как надо... Но ты если что, пиши! xD

#include "stdafx.h"
#include <conio.h>
#include <iostream>

using namespace std;

void main (void)
{
bool flag=false;
int count,sum=0;
cout<<"Enter count of ellements: ";
cin>>count;
int* myArr=(int*)calloc(count,sizeof(int));
for(int i=0;i<count;i++)
{
cout<<"Enter "<<i+1<<" ellement of array: ";
cin>>*(myArr+i);
}

cout<<"Array: ";
for(int i=0;i<count;i++)
{
cout<<" "<<*(myArr+i)<<" ";
if(flag==true)
sum+=*(myArr+i);
else if(*(myArr+i)>0)
{
flag=true;
}
}
cout<<endl<<"Sum of ellements: "<<sum<<endl;

getch();
free(myArr);
}

  Ответить  
 
 автор: kakalukia   (17.11.2008 в 18:48)   письмо автору
 
   для: StarWorm   (17.11.2008 в 03:50)
 

Спасибо огромное, что отозвались правда я ее уже написал, но все равно спасибо за ответ.
Я не совсем понимаю как работать с динамической памятью использую new и delete. Не могли бы вы расписать один примерчик, или написать его более понятно. Заранее благодарен и если есть ошибки исправить!!!
__________________________________________________________________________________
Во всех заданиях предусмотреть захват и освобождение динамической памяти (операции new, delete), решение оформить в виде отдельной функции, возвращающей требуемый результат. На печать в виде таблиц вывести исходный двухмерный динамический массив. Размеры массива n, m и исходный массив ввести с клавиатуры в функции main().
Дан целочисленный прямоугольный массив. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.
его код==>
#include<stdio.h>
#include<conio.h>
#include<windows.h>
int fun(int**,int,int);
void main()
{
int n,m,i,j;
int **mas;
printf("\nenter n");
scanf("%d",&n);
printf("\nenter m");
scanf("%d",&m);
if(n==0){printf("\nerror");}
mas=new int*[n];
for(i=0;i<n;i++) *(mas+i)=new int[m];
printf("\n enter array elements");
for(i=0;i<n;i++){
for (j=0;j<m;j++){
printf("\nmas[%d][%d]=",i,j);
scanf("%d",*(mas+i)+j);}
}
puts("Your array:");
for(i=0;i<n;i++)
{for(j=0;j<m;j++){printf("%d%c",*(*(mas+i)+j),(j==m-1)?'\n':' ');}}
printf("vivod %d stolbca",fun(mas,n,m));
for(i=0;i<n;i++) delete[]mas[i];
delete[]mas;
getch();
}

int fun(int **mas,int a,int b)
{
int i,j,num;
num=0;
for(i=0;i<a;i++)
{for(j=0;j<b;j++)
{if(*(*(mas+i)+j)==0){num=j;break;}}
}
return num;
}

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 23:53)   письмо автору
 
   для: kakalukia   (17.11.2008 в 18:48)
 

Честно... Я не смотрел твое решение, а сам написал новое! Оно точно работает, но не знаю, лучше оно или хуже!
Будет время - может посмотрю...
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>

using namespace std;

int numCol(int** arr,int str,int col)
{
for(int j=0;j<col;j++)
for(int i=0;i<str;i++)
if(arr[i][j]==0)
return j+1;
return 0;
}

int main()
{
srand( (unsigned)time( NULL ) );
int min_range=-2,max_range=2;
int n=0,m=0,colZero=0;
cout<<"Enter dimensinsions of array: ";
cin>>n>>m;
int** arr=new int*[n];
for(int i=0;i<n;i++)
arr[i]=new int[m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cout<<"\nEnter element arr("<<i+1<<","<<j+1<<"): ";
//cin>>arr[i][j];
arr[i][j]=(rand()%(max_range-min_range+1))+min_range; //Это для отладки... массив случайных чисел от min_range до max_range
}
cout<<"\n\nYour array is: \n";
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<"\t"<<arr[i][j];
}
cout<<"\n";
}
colZero=numCol(arr,n,m);
if(colZero)
cout<<"\nAnswer: column #"<<colZero<<" have element \'0\' first";
else
cout<<"\nAnswer: no columns with element \'0\'";
getch();
return 0;
delete [] arr;
}

  Ответить  
 
 автор: kakalukia   (18.11.2008 в 15:31)   письмо автору
 
   для: StarWorm   (17.11.2008 в 23:53)
 

Спасибо большое. Буду разбираться. Если что можно обращаться???

  Ответить  
 
 автор: StarWorm   (18.11.2008 в 18:39)   письмо автору
 
   для: kakalukia   (18.11.2008 в 15:31)
 

Конечно обращайся... Протестируй если надо... Может и у меня есть недочеты, т.к. пишу я очень быстро и не всегда все проверяю...
Обычно проверка заключается в нескольких пробных примерах/последовательностях!

  Ответить  
 
 автор: kakalukia   (20.11.2008 в 03:28)   письмо автору
 
   для: StarWorm   (18.11.2008 в 18:39)
 

Я смотрел твой вариант. ОН для меня сложен так как там все написано на С++, а я пока тока Си изучаю. Твой пример я понял тока в общем. Он выбрасывает ошибку из-за #include "stdafx.h".

  Ответить  
 
 автор: StarWorm   (20.11.2008 в 08:56)   письмо автору
 
   для: kakalukia   (20.11.2008 в 03:28)
 

Ну если что... выкинь этот инклуд, должно работать! :)
Ну а про то, что C++, то ты сам привел прогу на C++ (см. выше)
Да и отличие заключается только в выделении памяти...
calloc=new; free=delete и все...

  Ответить  
 
 автор: GeorgeIV   (20.11.2008 в 10:04)   письмо автору
 
   для: StarWorm   (20.11.2008 в 08:56)
 

Я бы не был столь категоричен. При недостатке памяти calloc возвратит нулевой указатель, а new вызовет исключение. Кроме того, calloc нужно приводить к необходимому типу.

  Ответить  
 
 автор: StarWorm   (20.11.2008 в 11:21)   письмо автору
 
   для: GeorgeIV   (20.11.2008 в 10:04)
 

Я имел ввиду, что в данном случае отличие заключается только в том, что я описал... Т.е. если человек понимает Си, то он и поймет мой код, написанный на C++... Я хотел сказать именно это! :)

  Ответить  
 
 автор: kakalukia   (20.11.2008 в 16:03)   письмо автору
 
   для: StarWorm   (20.11.2008 в 11:21)
 

Я на начальной стадии изучения Си. И решена она не правильна, когда вводишь все положительные числа он выводит что 0 содержится в 0 столбце, хотя должен был писать error, или столбца с 0 значением не существует. Вот поэтому я написал, то что у меня получилось, там такая же ошибка.

  Ответить  
 
 автор: StarWorm   (20.11.2008 в 16:15)   письмо автору
 
   для: kakalukia   (20.11.2008 в 16:03)
 

Черт побери...
Answer: no columns with element \'0\'";
это переводится как Нет таких строчек, которые содержат элемент '0'
Или где у тебя что не так выводится... Конкретный пример с пояснением...

  Ответить  
 
 автор: kakalukia   (20.11.2008 в 17:45)   письмо автору
102.8 Кб
 
   для: StarWorm   (20.11.2008 в 16:15)
 

Посмотри.

  Ответить  
 
 автор: StarWorm   (20.11.2008 в 18:15)   письмо автору
 
   для: kakalukia   (20.11.2008 в 17:45)
 

Объясни нубу, как это посмотреть... Где-то читал, что есть возможность что-то сохранять в формате xml... Но это было давно и неправда! :)

  Ответить  
 
 автор: kakalukia   (20.11.2008 в 18:19)   письмо автору
116 Кб
 
   для: StarWorm   (20.11.2008 в 18:15)
 

Ты не нуб : )) просто проще относиться к этому надо.

  Ответить  
 
 автор: StarWorm   (20.11.2008 в 18:37)   письмо автору
269 Кб
 
   для: kakalukia   (20.11.2008 в 18:19)
 

Ничего не понял... Тупею наверное... Вот тебе мой ответ прикреплен... Посмотри! :)

  Ответить  
 
 автор: kakalukia   (21.11.2008 в 02:36)   письмо автору
 
   для: StarWorm   (20.11.2008 в 18:37)
 

Ну блин, что ты тут скажешь. Я на самом деле твой код использовал, тока без первого include. Все равно спасибо тебе большое)).

  Ответить  
 
 автор: kakalukia   (20.11.2008 в 16:12)   письмо автору
 
   для: StarWorm   (20.11.2008 в 11:21)
 

Ну на сколько я зная С++ вытек из Си, поэтому многое похоже. Я написал, что я в общем понял, но осталось то, что требует пояснения.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования